DataViewでフィルタリングする
DataGridViewコントロールに表示されるデータにフィルタをかけるにはDataViewオブジェクトを使用します。
'---create an instance of the table adapter--- Dim adapter As New CustomersTableAdapter '---create an instance of the dataview class--- Dim dv As New DataView(adapter.GetData) With dv .AllowNew = False .AllowDelete = True .Sort = "ContactTitle ASC, Address ASC" .RowFilter = "CustomerID LIKE 'B*'" End With DataGridView1.DataSource = dv
上の例は、DataViewオブジェクトを使うことにより、DataGridViewコントロールにユーザーが新しい行を追加するのを許可したり(AllowNewプロパティ)、行を削除するのを許可したり(AllowDeleteプロパティ)できることを示しています。また、フィールドとソート順序を指定して行をソートすることもできます(Sortプロパティ)。さらに、SQLに似た式を指定してレコードにフィルタをかけることもできます(RowFilterプロパティ)。
上の例では、行をContactTitleフィールドの昇順でソートし、さらにAddressフィールドの昇順でソートしています。Addressフィールドの降順でソートする場合は、次のように設定します。
.Sort = "ContactTitle ASC, Address DESC"
図7に、ContactTitleフィールドとAddressフィールドを共に昇順でソートしたケースと、ContactTitleを昇順、Addressを降順でソートしたケースを示します。
列をソートする
DataViewオブジェクトを使えばフィルタリングやソートを実行できますが、DataGridViewコントロールのSort()メソッドでもソートを制御できます。
'---sort based on the first column---
DataGridView1.Sort(DataGridView1.Columns(0), _
System.ComponentModel.ListSortDirection.Descending)
この例では、行を最初の列の降順でソートしています(図8)。
プログラムによるソートとは別に、ユーザーが実行時にソートグリフ(列見出しの隣に表示される三角形のアイコン)をクリックして行を昇順または降順にソートすることも可能です。行がソートされないようにするには、SortModeプロパティを「NotSortable」に設定します。
'---set the sort mode for a column---
DataGridView1.Columns(1).SortMode = _
DataGridViewColumnSortMode.NotSortable
プログラミングによって列を追加する
これまで紹介した方法は、データセットまたはBindingSourceコントロールを用いて、DataGridViewコントロールにデータベースをバインドするというものでした。しかし、ときにはプログラミングによってDataGridViewコントロール内にさまざまなフィールドを作成し、ユーザーに値を設定させる場合もあります(同様に、プログラミングによって新しい行を追加することもできます)。DataGridViewコントロール内に列を作成するには、DataGridViewコントロールのColumnsプロパティのAdd()メソッドを使用します。次の例では、DataGridViewコントロール内に4つのフィールドを作成しています。
'---adding columns--- DataGridView1.Columns.Add("ID", "Product ID") DataGridView1.Columns.Add("Name", "Product Name") DataGridView1.Columns.Add("Description", "Description") DataGridView1.Columns.Add("Price", "Price")
図9は、このDataGridViewコントロールの表示結果です。

行を追加する
DataGridViewコントロールに行を追加するには、RowsプロパティのAdd()メソッドを使用します。
'---add an empty row---
DataGridView1.Rows.Add()
行を追加してそこに内容を割り当てるには、DataGridViewRowクラスのインスタンスを作成してからCreateCells()メソッドで行テンプレートを作成します。
For i As Integer = 0 To 9 '---create a row--- Dim item As New DataGridViewRow item.CreateCells(DataGridView1) With item .Cells(0).Value = i .Cells(1).Value = "Product " & i .Cells(2).Value = "Description of Product " & i .Cells(3).Value = "99.99" End With '---add the row--- DataGridView1.Rows.Add(item) Next
行の各フィールドに割り当てる一連の値を配列に格納し、その配列を使用して新しい行を追加することもできます。
For i As Integer = 0 To 9 DataGridView1.Rows.Add(New String() _ {i, _ "Product " & _ i, _ "Description of Product " & i, _ "99.99"}) Next
図10は、上の2つの例の出力です。



