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);
}
}