50

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

这就是我所拥有的:

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”类型。

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

4

4 回答 4

83

你仍然需要通过DataTable课程。但是您可以通过使用属性来使用您的DataRow实例。Table

foreach (DataColumn c in dr.Table.Columns)  //loop through the columns. 
{
    MessageBox.Show(c.ColumnName);
}
于 2012-10-10T15:49:30.490 回答
13

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

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

然后使用以下命令调用它:

string MyColumnName = MyRow.GetColumn(5);
于 2012-10-10T16:10:10.487 回答
5

你需要这样的东西:

foreach(DataColumn c in dr.Table.Columns)
{
  MessageBox.Show(c.ColumnName);
}
于 2012-10-10T15:51:22.700 回答
-5

改用 DataTable 对象:

 private void doMore(DataTable dt)
    {
    foreach(DataColumn dc in dt.Columns)
    {
    MessageBox.Show(dc.ColumnName);
    }
    }
于 2012-10-10T15:50:00.740 回答