我有一个带有DataGridView的WinForms应用程序,该数据源是一个数据表(从SQL Server填充),该表具有一列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<DataGridViewCell>().First(c => c.OwningColumn.HeaderText == HeaderText).Value;
    }
}

然后在您的代码中:
foreach (DataGridViewRow row in Rows)
{
    if (object.Equals(row.Cells.GetCellValueFromColumnHeader("xxx"), 123))
    {
        // ...
    }
 }

10-04 15:13