Имя столбца данных из DataRow (не 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».

Как мне получить имя столбца из строки, или у меня нет выбора, и я должен передать всю таблицу данных в функцию?


person James Dean    schedule 10.10.2012    source источник
comment
Вы действительно хотите показать столбец или данные в строке?   -  person cuongle    schedule 10.10.2012


Ответы (4)


Вам все равно нужно будет пройти DataTable класс. Но вы можете сделать это, используя экземпляр DataRow, используя свойство Table. .

foreach (DataColumn c in dr.Table.Columns)  //loop through the columns. 
{
    MessageBox.Show(c.ColumnName);
}
person Daniel Hilgarth    schedule 10.10.2012
comment
Спасибо, это было именно то, что мне было нужно. - person James Dean; 10.10.2012

Вы можете сделать это проще в своем коде (если вы все равно делаете это много), используя расширение объекта DataRow, например:

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

Затем вызовите его, используя:

string MyColumnName = MyRow.GetColumn(5);
person Rob Hardy    schedule 10.10.2012

Вам нужно что-то вроде этого:

foreach(DataColumn c in dr.Table.Columns)
{
  MessageBox.Show(c.ColumnName);
}
person Mark Harrell    schedule 10.10.2012

вместо этого используйте объект DataTable:

 private void doMore(DataTable dt)
    {
    foreach(DataColumn dc in dt.Columns)
    {
    MessageBox.Show(dc.ColumnName);
    }
    }
person Kamil Krasinski    schedule 10.10.2012
comment
-1: ОП специально сказал, что он хочет передать только DataRow своему методу. - person Daniel Hilgarth; 10.10.2012