49

我有一些代码通过列名设置 DataRow 中单元格的值,即

row["ColumnName"] = someValue;

我还想在上面找到的右侧的列中设置这一行的值。显然,如果我按索引而不是按列名获取单元格,这将很容易。那么有没有办法从列名中获取列索引,从而允许我这样做:

row[index + 1] = someOtherValue;

即我是否需要在最初创建表时创建某种列索引和列名的字典,或者我可以稍后从列名中获取索引而不这样做?

4

4 回答 4

85

您可以使用DataColumn.Ordinal来获取DataTable. 因此,如果您需要提到的下一列,请使用Column.Ordinal + 1

row[row.Table.Columns["ColumnName"].Ordinal + 1] = someOtherValue;

警告:

此代码返回下一列,即问题中所要求的后面的列。 ColumnName

于 2012-07-05T08:14:02.213 回答
38

试试这个:

int index = row.Table.Columns["ColumnName"].Ordinal;
于 2012-07-05T08:17:25.440 回答
9

您可以简单地使用DataColumnCollection.IndexOf

这样您就可以按名称获取所需列的索引,然后将其与您的行一起使用:

row[dt.Columns.IndexOf("ColumnName")] = columnValue;
于 2015-12-23T09:11:32.260 回答
3

我编写了 DataRow 的扩展方法,它通过列名获取对象。

public static object Column(this DataRow source, string columnName)
{
    var c = source.Table.Columns[columnName];
    if (c != null)
    {
        return source.ItemArray[c.Ordinal];
    }

    throw new ObjectNotFoundException(string.Format("The column '{0}' was not found in this table", columnName));
}

它的名字是这样的:

DataTable data = LoadDataTable();
foreach (DataRow row in data.Rows)
{        
    var obj = row.Column("YourColumnName");
    Console.WriteLine(obj);
}
于 2014-04-28T10:43:50.620 回答