DataView を使用すると、DataTable に保存されているデータに対してさまざまなビューを作成できます。たとえば、DataView を通じて、さまざまな並べ替え順序を使用して DataTable 内のデータを表示したり、データ列のステータスやフィルター式に基づいて DataTable 内のデータをフィルターしたりできます。重要なことは、DataTable 内のデータに対してさまざまなビューを作成し、これらのデータをフォーム上のコントロールにバインドする必要がある場合、それを完了するために DataView を使用する必要があるということです。
DataView は動的なデータ ビューを提供します。つまり、その内容、並べ替え順序、メンバーはソース DataTable の変更を反映します。明らかに、DataView は DataTable.Select メソッドとは大きく異なります。Select メソッドは、特定のフィルター式または並べ替え順序に基づいてデータ テーブルから DataRow オブジェクトの配列を返し、そのメンバーと並べ替え順序は静的です。 DataView は動的に反応する性質があるため、データ バインディング アプリケーションでの使用に非常に適しています。
DataView は、単一のデータ コレクションの動的なビューを提供します。これは、SQL Server データベースが提供するビューに似ています。ただし、DataView とデータベース ビューの間には依然として大きな違いがあります。DataView はデータ テーブルとして使用できず、データ テーブルに接続するビューも提供できないためです。さらに、ソース データ テーブルのフィールドを除外できないだけでなく、ソース データ テーブルに存在しないフィールド (式フィールドなど) を追加することもできません。
DataView は 2 つの方法で作成できます。 1 つ目の方法は DataView コンストラクターを使用する方法で、2 つ目は DataTable の DefaultView プロパティへの参照を作成する方法です。この記事では、これら 2 つのメソッドを使用して DataView を作成する方法を詳しく説明します。
DataView コンストラクターの使用
DataView コンストラクターには、次の表に示す 3 つのマルチロード バージョンが用意されています。
DataView コンストラクターのマルチロード バージョン
データビュー()
DataView(ByValテーブルをDataTableとして)
DataView(ByVal テーブル As DataTable, _
ByVal RowFilter を文字列として、_
ByVal 文字列として並べ替え、_
ByVal RowState As DataViewRowState)
DataView コンストラクターの最初のバージョンは、パラメーターを指定せずに DataView クラスの新しいインスタンスを初期化します。このバージョンを使用して DataView を作成する場合は、DataView オブジェクトの作成後にまず Table プロパティを設定してソース DataTable を決定する必要があり、その後、引き続き他のプロパティ (RowFilter、Sort など) を設定できることに注意してください。 。
次のプログラム コードは、DataView コンストラクターの最初のバージョンを使用して DataView オブジェクトを作成し、データ セット内の「Zhang Limin Studio」データ テーブルのデータ列をフィルター処理して並べ替え、DataGridView コントロールをこれにバインドする方法を示しています。データビュー。 DataGrid コントロールには女性のみが表示され、データは名前の画数の多いものから少ないものの順に並べられることがわかりました。この例のプログラム コードは次のとおりです。
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
'DataViewオブジェクトの作成
Dim dv As DataView = New DataView
' DataView オブジェクトの作成にはパラメータのない DataView コンストラクターが使用されるため、
' したがって、ソース DataTable を決定するには、最初に Table プロパティを設定する必要があります。
dv.Table = Ds Zhang Limin Studio. Zhang Limin Studio
' 名前の画数が多い順に並ぶように並べ替え順序を設定します。
dv.Sort = "NameDESC"
' 女性のみを表示するようにフィルター条件を設定します
dv.RowFilter = "Gender = ' Female'"
' DataGridView コントロールを DataView にバインドします
DataGridView1.DataSource = dv
DataView コンストラクターの 2 番目のバージョンは、指定された DataTable を使用して DataView クラスの新しいインスタンスを初期化することを表します。
次のプログラム コードは、DataView コンストラクターの 2 番目のバージョンを使用して DataView オブジェクトを作成し、データ セット内の「Zhang Limin Studio」データ テーブルのデータ列をフィルター処理して並べ替え、DataGridView コントロールをこれにバインドする方法を示しています。データビュー 。 DataGridView コントロールは「情報部門」の従業員データのみを表示し、データは現在の給与に応じて高い順に並べられることがわかりました。
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' DataView オブジェクトを作成します
Dim dv As DataView = New DataView(Ds Zhang Limin Studio. Zhang Limin Studio)
'現在の給与に基づいて高い順に並べ替えるように並べ替え順序を設定します
dv.Sort = "現在の給与 DESC"
'「情報部」の社員データのみを表示するように絞り込み条件を設定します
dv.RowFilter = "Department = '情報部門'"
' DataGridView コントロールを DataView にバインドします
Me.DataGridView1.DataSource = dv
DataView コンストラクターの 3 番目のバージョンは、指定された DataTable、RowFilter、Sort、および DataViewRowState を使用して DataView クラスの新しいインスタンスを初期化することを表します。
次のプログラム コードは、DataView コンストラクターの 3 番目のバージョンを使用して DataView オブジェクトを作成し、データ セット内の「Zhang Limin Studio」データ テーブルのデータ列をフィルター処理して並べ替え、DataGridView コントロールをこれにバインドする方法を示しています。データビュー 。 DataGridView コントロールは、現在の給与が 49,000 元を超える従業員データのみを表示し、データは現在の給与に応じて高いものから低いものに配置されることがわかりました。
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' DataView オブジェクトを作成します
Dim dv As DataView = New DataView( _
張立民スタジオ、_
"現在の給与 > 49000", _
"現在の給与 DESC", _
DataViewRowState.CurrentRows)
' DataGridView コントロールを DataView にバインドします
Me.DataGridView1.DataSource = dv
DataView が作成されるとき、および Sort、RowFilter、または RowStateFilter プロパティのいずれかが変更されるとき、DataView のインデックスが再確立されることを皆さんに思い出していただきたいと思います。つまり、最高のパフォーマンスを享受したい場合は、DataView の作成時にコンストラクターで並べ替え順序またはフィルター条件を直接指定する必要があります。 DataView の作成時にコンストラクターで並べ替え順序やフィルター条件を直接指定せず、作成後に DataView オブジェクトの Sort、RowFilter、または RowStateFilter プロパティを設定すると、DataView のインデックスが再確立されます。インデックスは少なくとも 2 回作成されます。
DataTable の DefaultView プロパティの使用
DataTable の DefaultView プロパティは、DataTable をソース データ テーブルとして使用する DataView オブジェクトを返します。これにより、DataTable 内のデータ列の並べ替え、フィルター、および検索が可能になります。作成した DataView で DataTable 内のすべてのデータ列を表示し、自然な順序で並べたい場合は、DataTable の DefaultView プロパティを使用すると、DataView を作成するための非常に直接的で便利な方法になります。
図 1 に実行画面が示されているプログラムでは、DataTable の DefaultView プロパティを使用して DataView を作成し、最初にソース データ テーブルのすべてのデータ列を DataGrid コントロールに表示し、ユーザーが実行フェーズ中に DataView を渡してデータを動的にフィルタリングします。プログラムコードは以下のとおりです。
' DataView オブジェクトのカテゴリ レベルの宣言
Private dv As DataView
Private Sub DemoForm5_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) MyBase.Load を処理します
FillComboBoxDepartment()
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' DataView の作成
dv = Ds Zhang Limin Studio.Zhang Limin Studio.DefaultView
' DataView のデータ列の数を表示します。
txtRowCount.Text = dv.Count.ToString
' DataGridView コントロールを DataView にバインドします
Me.DataGridView1.DataSource = dv
End Sub
Private Sub FillComboBoxDepartment()
'データ コマンド オブジェクト (つまり、SqlCommand オブジェクト) を作成します。
新しい SqlCommand としての Dim foxCMD
foxCMD.Connection = SqlConnection1
foxCMD.CommandText = "dbo.Zhang Limin Studio から DISTINCT 部門を選択"
'接続を開きます
SqlConnection1.Open()
myReader を SqlDataReader として使用する = foxCMD.ExecuteReader()
myReader.HasRows の場合
myReader.Read()
ComboBoxDepartment.Items.Add(myReader.GetSqlString(0))
途中で終了
終了の場合
使用を終了する
ComboBoxDepartment.SelectedIndex = 0
End Sub
Private Sub btnFilter_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) btnFilter.Click を処理します
dv.RowFilter = "部門= '" & _
ComboBoxDepartment.SelectedItem.ToString() & "'"
'DataView のデータ列の数を表示します
txtRowCount.Text = dv.Count.ToString
エンドサブ
http://www.cnblogs.com/liminzhang/archive/2006/10/23/537518.html