データの並べ替えとフィルター処理

DataView には、DataTable のデータの並べ替えとフィルター処理を行うさまざまな方法が用意されています。

  • Sort プロパティを使用すれば、1 列または複数列の並べ替え順序を指定し、ASC (昇順) パラメーターと DESC (降順) パラメーターを含めることができます。

  • ApplyDefaultSort プロパティを使用すると、テーブルの主キー列 (1 列または複数列) に基づいて、昇順の並べ替え順序を自動的に作成できます。 Sort プロパティが null 参照または空の文字列の場合、およびテーブルに主キーが定義されている場合は、ApplyDefaultSort だけが適用されます。

  • RowFilter プロパティを使用すると、列の値に基づいて行のサブセットを指定できます。 RowFilter プロパティの有効な式の詳細については、DataColumn クラスの Expression プロパティの情報を参照してください。

    データ サブセットの動的ビューの作成とは対照的に、データに対して特定のクエリの実行結果を返す場合、パフォーマンスを最大限に引き出すには、RowFilter プロパティを設定する代わりに DataViewFind メソッドまたは FindRows メソッドを使用します。 RowFilter プロパティを設定すると、データのインデックスが再作成され、アプリケーションのオーバーヘッドが増加してパフォーマンスの低下を招きます。 RowFilter プロパティは、データ連結アプリケーションでの使用に適しています。このアプリケーションでは、連結されたコントロールによってフィルター処理結果が表示されます。 Find メソッドと FindRows メソッドでは、現在のインデックスが使用されます。このため、インデックスを再作成する必要はありません。 Find メソッドと FindRows メソッドの詳細については、「行の検索」を参照してください。

  • RowStateFilter プロパティを使用して、表示する行バージョンを指定できます。 DataView では、基になる行の RowState に応じて、公開する行バージョンが暗黙的に管理されます。 たとえば、RowStateFilterDataViewRowState.Deleted に設定されている場合は、Current 行バージョンが存在しないため、DataView ではすべての Deleted 行の Original 行バージョンが公開されます。 DataRowViewRowVersion プロパティを使用すると、公開される行のバージョンを確認できます。

    DataViewRowState のオプションを次の表に示します。

    DataViewRowState のオプション 説明
    CurrentRows すべての Unchanged 行、Added 行、Modified 行の Current 行バージョン。 既定値です。
    追加 すべての Added 行の Current 行バージョン。
    削除済み すべての Deleted 行の Original 行バージョン。
    ModifiedCurrent すべての Modified 行の Current 行バージョン。
    ModifiedOriginal すべての Modified 行の Original 行バージョン。
    None 行がありません。
    OriginalRows すべての Unchanged 行、Modified 行、Deleted 行の Original 行バージョン。
    Unchanged すべての Unchanged 行の Current 行バージョン。

行の状態と行バージョンの詳細については、「行の状態とバージョン」を参照してください。

在庫数が標準在庫数以下である製品を、仕入先 ID (supplier ID) で並べ替え、さらに製品名 (product name) で並べ替えたビューを作成するコード サンプルを次に示します。

Dim prodView As DataView = New DataView(prodDS.Tables("Products"), _  
   "UnitsInStock <= ReorderLevel", _  
   "SupplierID, ProductName", _  
   DataViewRowState.CurrentRows)  
DataView prodView = new DataView(prodDS.Tables["Products"],  
   "UnitsInStock <= ReorderLevel",  
   "SupplierID, ProductName",  
   DataViewRowState.CurrentRows);  

関連項目