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

时间:2012-11-18 01:15:57

标签: c# winforms datagridviewcolumn

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

的例外
  

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

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

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

7 个答案:

答案 0 :(得分:19)

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

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

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

然后在你的代码中:

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

答案 1 :(得分:10)

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

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

...即你的列真的被称为xxx而不是其他名称如Column1等。你可以独立设置列名和列标题,所以请检查设计师。

答案 2 :(得分:7)

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

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

答案 3 :(得分:6)

我发现了这个:

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

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

答案 4 :(得分:3)

如果您在设计模式下使用网格列。 然后列名是gridView ~~~列控件的名称 例如:

DataGridViewTextBoxColumn idDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();

idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn";

然后你可以根据需要访问它。

row.Cells["idDataGridViewTextBoxColumn"].Value

答案 5 :(得分:0)

如果您关注:

row.Cells["xxx"].Value;

通过此:

row.Cells[yourdataGridView.Columns["xxx"].Index].Value;

答案 6 :(得分:0)

如果您的 datagridviews 列是具有专用标题文本的动态列,那么您可以像这样为 DGV 的特定列分配一个名称:

dataGridView2.Columns[1].HeaderText = "Invoice No";
dataGridView2.Columns[1].Name = "invoice_no";

然后可以使用该名称作为索引,如下所示:

foreach (DataGridViewRow row in rows_with_checked_column)
{
    MessageBox.Show(row.Cells["invoice_no"].Value.ToString());
}