我有一些代码,其通过柱名即设置在一个DataRow细胞的值
row["ColumnName"] = someValue;
我也想立即设置此行的值列上面发现了一个右侧。 显然,如果我得到的指数,而不是按列名的单元,这将是很容易。 那么,有没有从列名获取列索引从而使我做的一种方式:
row[index + 1] = someOtherValue;
即是否需要建立某种形式的最初创建表列索引和列名的词典,或者我可以从列名的索引以后不这样做呢?
我有一些代码,其通过柱名即设置在一个DataRow细胞的值
row["ColumnName"] = someValue;
我也想立即设置此行的值列上面发现了一个右侧。 显然,如果我得到的指数,而不是按列名的单元,这将是很容易。 那么,有没有从列名获取列索引从而使我做的一种方式:
row[index + 1] = someOtherValue;
即是否需要建立某种形式的最初创建表列索引和列名的词典,或者我可以从列名的索引以后不这样做呢?
您可以使用DataColumn.Ordinal
获得在列的索引DataTable
。 所以,如果你需要的下一列提到使用Column.Ordinal + 1
:
row[row.Table.Columns["ColumnName"].Ordinal + 1] = someOtherValue;
试试这个:
int index = row.Table.Columns["ColumnName"].Ordinal;
你可以简单地使用DataColumnCollection.IndexOf
所以,你可以通过名字得到所需要的列的索引,然后用你的行使用它:
row[dt.Columns.IndexOf("ColumnName")] = columnValue;
我写的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);
}