データテーブルにバインドされた Datagridview があります。たとえば、セルの値が「N」の場合は行を表示し、「Y」の場合は行を非表示にします。
データ列は次のように設定されています。
New DataColumn With {.ColumnName = "Rec", .AllowDBNull = False, .DefaultValue = "N", .DataType = GetType(String)}
以下のように Datagridview の CellValueChanged イベントも処理しました。
Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
If CType(sender, DataGridView).Columns(e.ColumnIndex).HeaderText.Equals("Rec") Then
CType(sender, DataGridView).Rows(e.RowIndex).Visible = CType(sender, DataGridView).Item(e.ColumnIndex, e.RowIndex).Value.Equals("N")
End If
End Sub
しかし、プログラムで値を「Y」に変更すると (グリッドで値が変更されたことがわかります)、行は引き続き表示されます。また、イベント ハンドラー内にブレークを配置しましたが、発生しません。質問は、セル値を「Y」に変更したときにデータグリッドビュー行を非表示にするにはどうすればよいですか?
編集
当面の問題をより明確にするために、これはグリッドのデータソースをプログラムで更新する方法です。
CType(DataGridView1.DataSource, DataTable).Item("Rec") = "Y"
グリッドを直接更新して cellvaluechanged イベントを発生させることができますが、これにより CurrencyManager エラーがスローされるため、セル値が更新されるたびにバインドを一時停止してからグリッドへのバインドを再開する必要があります。それは機能しますが、小さなデータセットでもカタツムリのペースで動作します (リフレクションを介して実装されたダブル バッファリングを使用しても)。