获取具有名称的 DataTable 列的索引

Posted

技术标签:

【中文标题】获取具有名称的 DataTable 列的索引【英文标题】:get index of DataTable column with name 【发布时间】:2012-07-05 14:49:14 【问题描述】:

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

row["ColumnName"] = someValue;

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

row[index + 1] = someOtherValue;

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

您不需要+ 1,只需row[row.Table.Columns["ColumnName"].Ordinal] = someOtherValue; 即可。 @Piers:但 OP 需要在另一列之后的下一列。 那么你应该写..to get the index of the NEXT column。我不小心在我的代码中使用了你的行,同时犯了那个 +1 的错误。感谢@PiersMyers 注意到它。 @TimSchmelter,如何获取数组中的所有列索引?例如:Table.Columns[0,1,2,3,4,5,6,7]【参考方案2】:

试试这个:

int index = row.Table.Columns["ColumnName"].Ordinal;

【讨论】:

+1 虽然蒂姆打败了你,但我会将他标记为答案。【参考方案3】:

您可以简单地使用DataColumnCollection.IndexOf

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

row[dt.Columns.IndexOf("ColumnName")] = columnValue;

【讨论】:

【参考方案4】:

我写了一个 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);

【讨论】:

这个扩展是否应该抛出“ObjectNotFoundException”而不是“ItemNotFoundException”? msdn.microsoft.com/en-us/library/… -1 DataRow 已经在您的示例中构建了它,如果您执行 row["YourColumnName"] 它将返回该单元格的内容。如果该列不存在,则会抛出 System.ArguementException 并且这是消息 "Column 'YourColumnName' doesn't belongs to table Table." 所以除非这有一些性能提升,否则请删除。这也没有回答如何获取索引的问题。

以上是关于获取具有名称的 DataTable 列的索引的主要内容,如果未能解决你的问题,请参考以下文章

如何获取数据表列的名称?

datagridview 列索引

C# 数据表问题

从具有大量列的 DataTable 添加值后清空 DataGridView

使用pandas创建稀疏矩阵,并使用来自.dat文件的其他两列的索引[x,y]的.dat文件的一列中的值填充它

C# 获取datatable某一列的值