データの並べ替えとフィルタ処理 (ADO.NET)
更新 : November 2007
DataView には、DataTable のデータの並べ替えとフィルタ処理を行うさまざまな方法が用意されています。
Sort プロパティを使用すれば、1 列または複数列の並べ替え順序を指定し、ASC (昇順) パラメータと DESC (降順) パラメータを含めることができます。
ApplyDefaultSort プロパティを使用すると、テーブルの主キー列 (1 列または複数列) に基づいて昇順の並べ替え順序を自動的に作成できます。Sort プロパティが null 参照または空の文字列の場合、およびテーブルに主キーが定義されている場合は、ApplyDefaultSort だけが適用されます。
RowFilter プロパティを使用すると、列の値に基づいて行のサブセットを指定できます。RowFilter プロパティの有効な式の詳細については、DataColumn クラスの Expression プロパティの情報を参照してください。
データ サブセットの動的ビューの作成とは対照的に、データに対して特定のクエリの実行結果を返す場合、パフォーマンスを最大限に引き出すには、RowFilter プロパティを設定する代わりに DataView の Find メソッドまたは FindRows メソッドを使用します。RowFilter プロパティを設定すると、データのインデックスが再作成され、アプリケーションのオーバーヘッドが増加してパフォーマンスの低下を招きます。RowFilter プロパティは、データ連結アプリケーションでの使用に適しています。このアプリケーションでは、連結されたコントロールによってフィルタ処理結果が表示されます。Find メソッドと FindRows メソッドでは、現在のインデックスが使用されます。このため、インデックスを再作成する必要はありません。Find メソッドと FindRows メソッドの詳細については、「行の検索 (ADO.NET)」を参照してください。
RowStateFilter プロパティを使用して、表示する行バージョンを指定できます。DataView は、基になる行の RowState に従って、暗黙的に行バージョンを公開します。たとえば、RowStateFilter が DataViewRowState.Deleted に設定されている場合、DataView は行バージョンが Original の Deleted 行をすべて公開します。これは、Current 行バージョンが存在しないためです。DataRowView の RowVersion プロパティを使用すると、公開される行のバージョンを確認できます。
DataViewRowState のオプションを次の表に示します。
DataViewRowState のオプション
説明
CurrentRows
Current 行バージョンのすべての Unchanged 行、Added 行、および Modified 行です。これは、既定の設定です。
Added
Current 行バージョンのすべての Added 行です。
Deleted
Original 行バージョンのすべての Deleted 行です。
ModifiedCurrent
Current 行バージョンのすべての Modified 行です。
ModifiedOriginal
Original 行バージョンのすべての Modified 行です。
None
行がありません。
OriginalRows
Original 行バージョンのすべての Unchanged 行、Modified 行、および Deleted 行です。
Unchanged
Current 行バージョンのすべての Unchanged 行です。
行状態と行バージョンの詳細については、「行の状態とバージョン」を参照してください。
在庫数が標準在庫数以下である製品を、仕入先 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);