如何在DataGridView中获取选定的DataRow?

我有一个绑定到DataGridView的DataTable。 我在DGV中启用了FullRowSelect。 有没有办法将所选行作为DataRow获取,以便我可以获得对所选行的值的强类型访问?

我不知道怎么做没有BindingSource,这里有一个如何做到这一点:

var drv = bindingSoure1.Current as DataRowView; if (drv != null) var row = drv.Row as MyRowType; 
 DataRowView currentDataRowView = (DataRowView)dgv1.CurrentRow.DataBoundItem DataRow row = currentDataRowView.Row 

获得以下财产是可能的:

 this.dataGridView.SelectedRows 

获得一个类型的集合: DataGridViewSelectedRowCollection 。 它包含以下类型的项: DataGridViewRow

然后可以通过以下方式获得自己类型的绑定:

 DataGridViewSelectedRowCollection list = this.dataGridViewInventoryRecords.SelectedRows; MyType selectedItem = (MyType)list[0].DataBoundItem; //[0] ---> first item 

您应该能够将所选行直接转换为绑定到DataGridView的强类型行。

你试试这个。

DataRow row = gridView1.GetDataRow(gridView1.FocusedRowHandle);
if (row != null) { XtraMessageBox.Show(row["ID"].ToString()); else return;

如果已将datagridview绑定到数据库中的表或视图,则可以将数据作为强类型对象获取。

此答案适用于在设计时使用DataSet连接到数据库的Windows窗体。 示例名称是DataSet1,示例表名称是Customer_Info。

 // cast the data bound item to DataRowView so you have // access to "Row", which // has the actual data for the row in typed fields. DataRowView drv = dgv.SelectedRows(0).DataBoundItem as DataRowView; // run the code and look at the debugger value of drv.Row -- // the type will be shown // which is the type created by the data binding, representing // your table or view //{YourDataSetName.YourTableOrViewType} tmpTableData = drv.Row as {YourDataSetName.YourTableOrViewType}; DataSet1.Customer_InfoRow tmpTableData = drv.Row as DataSet1.Customer_InfoRow; 

这个链接就是答案。 我希望我已经增加了清晰度和上面的例子。 https://social.msdn.microsoft.com/Forums/windows/en-US/f252e395-58e6-4703-ba7b-0740efcbecf3/can-i-convert-the-selected-row-in-a-bound-datagridview-对一个类型的,数据行?论坛= winformsdatacontrols

此链接显示以编程方式添加到数据源的数据,而不是从现有数据库中提取该数据。 这让我得到了答案的一部分: https : //msdn.microsoft.com/en-us/library/4wszzzc7(v = vs.110).aspx

如果未在数据集内使用tableadapter,则无法对datagridview进行强类型访问。

要在通过绑定源将datagridview绑定到数据表时访问强类型变量,请执行以下操作:

创建一个新项目。

插入名为ds1的DataSet和名为dt99的DataTable,其中包含名为DataColumn1和DataColumn2的列,两者都是字符串类型。

在此处输入图像描述

将datagridView添加到主窗体并将其绑定到dt99

在此处输入图像描述

这样dt99BindingSource就连接了datagridview和datatable

在此处输入图像描述

为datagridview的Selection Change添加和事件处理程序,并插入以下代码段

private void dataGridView1_SelectionChanged(Object sender,EventArgs e){

  ds1.dt99Row d= ((ds1.dt99Row)((DataRowView)dt99BindingSource.Current).Row); Debug.WriteLine(d.DataColumn1 + " " + d.DataColumn2); 

}

现在您有强类型变量(d.DataColumn1和d.DataColumn2)来访问datagridview上正在选择的单元格

另一个有趣的特性是,插入数据集内的数据表提供了一组公共类,在处理数据表时可以提供很多帮助,例如

  private void Form1_Load(Object sender, EventArgs e) { ds1.dt99.Adddt99Row("K", "B"); ds1.dt99.Adddt99Row("L", "D"); ds1.dt99.Adddt99Row("M", "F"); ds1.dt99.Adddt99Row("N", "H"); ds1.dt99Row dr = ds1.dt99.Newdt99Row(); dr.DataColumn1 = "X"; dr.DataColumn2 = "Y"; ds1.dt99.Adddt99Row(dr); }