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

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

注意:ここで紹介しているDataGridは、System.Windows.Forms名前空間のDataGrid(Windowsフォーム)です。System.Web.UI.WebControls名前空間のDataGrid(Webフォーム)ではありません。

簡単に考えると、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;

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。