DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DOBON.NET

DataGridの現在の行を正しく取得する

簡単に考えると、DataGridの現在の行のインデックスはDataGrid.CurrentRowIndexプロパティで取得できるため、これとDataTable.Rowsプロパティを使って現在の行(DataRow)が取得できそうです。

[VB.NET]
Dim dt As DataTable = CType(DataGrid1.DataSource, DataTable)
Dim dr As DataRow = dt.Rows(DataGrid1.CurrentRowIndex)
[C#]
DataTable dt = (DataTable) DataGrid1.DataSource;
DataRow dr = dt.Rows[DataGrid1.CurrentRowIndex];

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

[VB.NET]
Dim bm As BindingManagerBase = _
    DataGrid1.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember)
Dim drv As DataRowView = CType(bm.Current, DataRowView)
Dim dr As DataRow = drv.Row
[C#]
BindingManagerBase bm =
    DataGrid1.BindingContext[DataGrid1.DataSource, DataGrid1.DataMember];
DataRowView drv = (DataRowView) bm.Current;
DataRow dr = drv.Row;