2012-10-10 15 views
33

Ho bisogno di iterare il nome della colonna e il tipo di dati della colonna da una riga specifica. Tutti gli esempi che ho visto hanno iterato un intero datatable. Voglio passare una singola riga a una funzione per eseguire una serie di elaborazioni condizionali. Voglio separare l'elaborazione condizionale per facilità di leggibilità.DataColumn Nome da DataRow (non DataTable)

Questo è quello che ho:

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

L'errore riscontrato è

System.InvalidCastException: Impossibile eseguire il cast oggetto di tipo 'System.String' digitare 'System.Data.DataColumn '.

Come si ottiene il nome della colonna dalla riga o non ho scelta e devo passare l'intero datatable alla funzione?

+0

Vuoi davvero mostrare colonna o dati in fila? –

risposta

57

Avresti ancora bisogno di passare attraverso la classe DataTable. Ma puoi farlo usando l'istanza DataRow usando la proprietà Table.

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

Grazie, era esattamente quello di cui avevo bisogno. –

-5

uso DataTable oggetto invece:

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

-1: L'OP ha detto esplicitamente che vuole solo passare un 'DataRow' al suo metodo. –

5

avete bisogno di qualcosa di simile:

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

È possibile rendere più facile nel codice (se si sta facendo questo molto in ogni caso) utilizzando un'estensione sull'oggetto DataRow, ad esempio:

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

Quindi chiamarlo utilizzando:

string MyColumnName = MyRow.GetColumn(5);