我有一些代码用列名设置DataRow中的单元格值,即
row["ColumnName"] = someValue;
我还想在列中的这一行的值中立即设置该行的值。显然,如果我通过索引而不是按列名获取单元格,这将很容易。那么有没有办法从列名中获取列索引,从而允许我这样做:
row[index + 1] = someOtherValue;
即。在最初创建表时,是否需要创建某种列索引和列名的字典,或者我可以稍后从列名中获取索引而不执行此操作?
答案 0 :(得分:67)
您可以使用DataColumn.Ordinal
获取DataTable
中列的索引。因此,如果您需要提到的下一列,请使用Column.Ordinal + 1
:
row[row.Table.Columns["ColumnName"].Ordinal + 1] = someOtherValue;
答案 1 :(得分:28)
试试这个:
int index = row.Table.Columns["ColumnName"].Ordinal;
答案 2 :(得分:5)
您只需使用DataColumnCollection.IndexOf
即可这样您就可以按名称获取所需列的索引,然后将其与行一起使用:
row[dt.Columns.IndexOf("ColumnName")] = columnValue;
答案 3 :(得分: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);
}