如何按列名获取DataGridView的单元格值?

我有一个带有DataGridView的WinForms应用程序,DataSource是一个DataTable(从SQL Server填充),其xxx 。 以下代码引发了例外

ArgumentException未处理。 找不到名为xxx的列。

 foreach (DataGridViewRow row in Rows) { if (object.Equals(row.Cells["xxx"].Value, 123)) } 

是否可以按列名获取单元格值?

DataGridViewColumn对象具有Name (仅在表单设计器中显示)和HeaderText (在列顶部的GUI中显示)属性。 您的示例中的索引器使用列的Name属性,因此,由于您说这不起作用,我假设您真的尝试使用列的标头。

没有任何内置的东西可以满足您的需求,但它很容易添加。 我使用扩展方法使其易于使用:

 public static class DataGridHelper { public static object GetCellValueFromColumnHeader(this DataGridViewCellCollection CellCollection, string HeaderText) { return CellCollection.Cast().First(c => c.OwningColumn.HeaderText == HeaderText).Value; } } 

然后在你的代码中:

 foreach (DataGridViewRow row in Rows) { if (object.Equals(row.Cells.GetCellValueFromColumnHeader("xxx"), 123)) { // ... } } 

是的,只需删除引号并添加.Index,即

 foreach (DataGridViewRow row in Rows) { if (object.Equals(row.Cells[xxx.Index].Value, 123)) 

… …如果您的列实际上被称为xxx而不是其他名称,如Column1等。您可以独立设置列名称和列标题,因此请检查设计器。

我找到了这个:

  1. 右键单击datagridview。
  2. 从弹出菜单“编辑列”中选择。
  3. 选择所需的列。 设计/(名称) – 这就是你要找的东西。

样品:

 if(dataGridViewProjectList.Rows[dataGridViewProjectList.CurrentCell.RowIndex].Cells["dateendDataGridViewTextBoxColumn"].Value.ToString().Length == 0) 

通过执行此操作,您将能够以“xxx”列名称访问当前所选行的单元格。

 dataGridView1.SelectedRows[0].Cells["xxx"] 

如果你在设计模式中的网格列。 然后列名是gridView ~~~列控件的名称示例:

 DataGridViewTextBoxColumn idDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn"; 

然后你可以访问这个,你想要的。

 row.Cells["idDataGridViewTextBoxColumn"].Value