【问题标题】:DataColumn Name from DataRow (not DataTable)来自 DataRow 的 DataColumn 名称(不是 DataTable)
【发布时间】:2012-10-10 15:47:08
【问题描述】:

我需要从特定行迭代列名和列数据类型。我见过的所有示例都迭代了整个数据表。我想将一行传递给一个函数来做一堆条件处理。为了便于阅读,我想将条件处理分开。

这就是我所拥有的:

private void doMore(DataRow dr)
{
    foreach (DataColumn c in dr.ItemArray)  //loop through the columns. 
    {
        MessageBox.Show(c.ColumnName.ToString());
    }
}

返回的错误是

System.InvalidCastException:无法将“System.String”类型的对象转换为“System.Data.DataColumn”类型。

如何从行中获取列名,还是我别无选择,必须将整个数据表传递给函数?

【问题讨论】:

  • 您真的只想在行中显示列或数据吗?

标签: c# .net datarow datacolumn


【解决方案1】:

您仍然需要学习DataTable 课程。但是您可以通过 Table 属性使用您的 DataRow 实例来执行此操作。

foreach (DataColumn c in dr.Table.Columns)  //loop through the columns. 
{
    MessageBox.Show(c.ColumnName);
}

【讨论】:

  • 谢谢,这正是我所需要的。
【解决方案2】:

您可以通过在 DataRow 对象上使用扩展来简化代码(如果您经常这样做的话),例如:

static class Extensions
{
    public static string GetColumn(this DataRow Row, int Ordinal)
    {
        return Row.Table.Columns[Ordinal].ColumnName;
    }
}

然后调用它:

string MyColumnName = MyRow.GetColumn(5);

【讨论】:

  • 这正是我所需要的。哎呀。在你的帮助之前浪费了几个小时。 “Row.Table.Columns[Ordinal].ColumnName;”是我一开始没有得到的部分。谢谢!
【解决方案3】:

你需要这样的东西:

foreach(DataColumn c in dr.Table.Columns)
{
  MessageBox.Show(c.ColumnName);
}

【讨论】:

    【解决方案4】:

    改用 DataTable 对象:

     private void doMore(DataTable dt)
        {
        foreach(DataColumn dc in dt.Columns)
        {
        MessageBox.Show(dc.ColumnName);
        }
        }
    

    【讨论】:

    • -1:OP 明确表示他只想将DataRow 传递给他的方法。
    猜你喜欢
    • 2011-05-12
    • 2019-03-17
    • 2014-11-23
    • 2020-09-02
    • 1970-01-01
    • 2016-05-27
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多