2012-10-10 45 views
33

我需要迭代特定行中的columnname和column数据类型。我见过的所有例子都迭代了整个数据表。我想传递一个单行到一个函数做一堆条件处理。为了便于阅读,我想分开条件处理。来自DataRow的DataColumn名称(不是DataTable)

这是我有:

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

如何从行中获取列名或者我没有选择并且必须将整个数据表传递给函数?

+0

你真的很想在行中显示列或数据吗? –

回答

57

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

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

谢谢,那正是我所需要的。 –

-5

使用DataTable对象来代替:

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

-1:OP明确表示他只想将一个DataRow传递给他的方法。 –

5

你需要的东西是这样的:

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

你可以把它在你的代码更容易(如果你反正这样做了很多)通过在DataRow对象上使用扩展名,例如:

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

然后用它来调用它:

string MyColumnName = MyRow.GetColumn(5); 
相关问题