2012-10-10 16 views
33

Necesito iterar el nombre de columna y el tipo de datos de columna de una fila específica. Todos los ejemplos que he visto han iterado una tabla de datos completa. Quiero pasar una sola fila a una función para hacer un montón de procesamiento condicional. Quiero separar el procesamiento condicional para facilitar la lectura.DataColumn Name from DataRow (no DataTable)

Esto es lo que tengo:

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

El error devuelto es

System.InvalidCastException: No se puede convertir objeto de tipo 'System.String' al tipo 'System.Data.DataColumn '.

¿Cómo obtendré el nombre de columna de la fila o no tengo otra opción y debo pasar toda la tabla de datos a la función?

+0

¿Realmente desea mostrar la columna o los datos en la fila? –

Respuesta

57

Aún necesitará pasar por la clase DataTable. Pero puede hacerlo utilizando su instancia DataRow utilizando la propiedad Table.

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

Gracias, eso era exactamente lo que necesitaba. –

-5

el uso de objetos DataTable en su lugar:

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

-1: El OP dijo específicamente que solo quiere pasar un 'DataRow' a su método. –

5

se necesita algo como esto:

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

Usted puede hacer que sea más fácil en su código (si está haciendo esto mucho de todos modos) mediante el uso de una extensión en el objeto DataRow, como:

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

Luego llámelo usando:

string MyColumnName = MyRow.GetColumn(5); 
Cuestiones relacionadas