2006.01.11

WindowsFormでのDataGridのセルクリック時の正確な行数の取り方

WindowsFormではWebFormのようにJavaScriptを使用できないため
DataGridのセルをクリックした行数を取得したい場合、規定の
メソッドを使って行います。

DataGrid_MouseUp、MouseDown、Clickイベント時に「DataGrid.HitTestInfo」
を使えばクリックしたDataGridのセルの行数を取得することが出来ます。

----サンプル----
Dim hitInfo As DataGrid.HitTestInfo
Dim iCol As Integer

hitInfo = CType(sender, DataGrid).HitTest(e.X, e.Y)
iCol = hitInfo.Row
----------------

しかし残念ながらこの方法では、例えば並び替えをした後などでは、
正しく現在の行を取得できません。正しく現在の行を取得するためには、
BindingManagerBase.Currentプロパティを使用します
以下の例では、DataGrid1.DataSourceにDataTableオブジェクトを
設定しているものとします。

----サンプル----
Dim bm As BindingManagerBase = _
DataGrid1.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember)
Dim drv As DataRowView = CType(bm.Current, DataRowView)
Dim dr As DataRow = drv.Row
----------------

これにより並び替えなどを行った場合でも正しい行数を取得することが出来ます。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
jin