2012-10-10 11 views
33

Potrzebuję iterować nazwę kolumny i typ danych kolumny od określonego wiersza. Wszystkie przykłady, które widziałem, przeszły iterację całego datatable. Chcę przekazać jeden wiersz do funkcji, aby wykonać wiązkę przetwarzania warunkowego. Chcę oddzielić przetwarzanie warunkowe, aby ułatwić czytelność.DataColumn Nazwa od DataRow (nie DataTable)

To jest to, co mam:

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

Błąd zwracany jest

System.InvalidCastException: Nie można rzutować obiektu typu 'System.String' wpisać „System.Data.DataColumn ".

Jak mogę uzyskać nazwę kolumny z wiersza lub czy nie mam wyboru i muszę przekazać cały zestaw danych do funkcji?

+0

Czy naprawdę chcesz wyświetlić kolumnę lub dane w wierszu? –

Odpowiedz

57

Będziesz nadal musiał przejść przez klasę DataTable. Ale możesz to zrobić, używając instancji DataRow, używając właściwości Table.

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

Dzięki, to było dokładnie to, czego potrzebowałem. –

-5

wykorzystanie obiektu DataTable zamiast:

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

-1: OP wyraźnie powiedział, że chce przekazać tylko "DataRow" do swojej metody. –

5

Trzeba coś takiego:

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

można łatwiej w kodzie (jeśli robisz to i tak dużo) za pomocą rozszerzenia na obiekcie DataRow, na przykład:

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

Następnie wywołaj go, używając:

string MyColumnName = MyRow.GetColumn(5); 
Powiązane problemy