我有一些代码,通过列名设置DataRow中单元格的值,例如:
row["ColumnName"] = someValue;
我还想设置该行中紧挨在上述所找到的列右边的那一列的值。显然,如果我是通过索引而不是通过列名获取单元格,这将很容易实现。因此,是否有一种方法可以从列名获取列索引,从而使我能够执行以下操作:
row[index + 1] = someOtherValue;
也就是说,当表格最初创建时,我需要创建某种列索引和列名称的字典吗?还是在以后可以通过列名获取索引而无需这样做?
您可以使用 DataColumn.Ordinal
获取 DataTable
中列的索引。因此,如果您需要下一列,请使用 Column.Ordinal + 1
:
row[row.Table.Columns["ColumnName"].Ordinal + 1] = someOtherValue;
这段代码返回ColumnName
之后的下一列,即问题中要求的那一列。
试试这个:
int index = row.Table.Columns["ColumnName"].Ordinal;
您可以简单地使用DataColumnCollection.IndexOf
通过名称获取所需列的索引,然后将其与您的行一起使用:
row[dt.Columns.IndexOf("ColumnName")] = columnValue;
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);
}
+ 1
,只需要row[row.Table.Columns["ColumnName"].Ordinal] = someOtherValue;
就可以了。 - Piers Myers..获取下一列的索引
。我因为那个 +1 引起错误而在我的代码中无意中使用了你的代码行。感谢 @PiersMyers 指出这个问题。 - C4dTable.Columns[0,1,2,3,4,5,6,7]
。 - thevinaychoudhary