read name index column c# .net datarow datacolumn

c# - index - DataColumn Name from DataRow(no DataTable)



get column datarow c# (4)

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

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

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.

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 el objeto de tipo ''System.String'' para escribir ''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?


Necesitas algo como esto:

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


Puede hacer que sea más fácil en su código (si lo hace 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ámalo usando:

string MyColumnName = MyRow.GetColumn(5);


use el objeto DataTable en su lugar:

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