ejemplos - datatable c#
obtener índice de la columna DataTable con nombre (4)
Escribí un método de extensión de DataRow que me proporciona el objeto a través del nombre de la columna.
public static object Column(this DataRow source, string columnName)
{
var c = source.Table.Columns[columnName];
if (c != null)
{
return source.ItemArray[c.Ordinal];
}
throw new ObjectNotFoundException(string.Format("The column ''{0}'' was not found in this table", columnName));
}
Y se llama así:
DataTable data = LoadDataTable();
foreach (DataRow row in data.Rows)
{
var obj = row.Column("YourColumnName");
Console.WriteLine(obj);
}
Tengo un código que establece el valor de las celdas en un DataRow por nombre de columna, es decir,
row["ColumnName"] = someValue;
También quiero establecer el valor de esta fila en la columna inmediatamente a la derecha de la que se encuentra arriba. Claramente, si obtuviera la celda por índice en lugar de por nombre de columna, sería fácil. Entonces, ¿hay alguna forma de obtener el índice de la columna del nombre de la columna, lo que me permite hacer lo siguiente:
row[index + 1] = someOtherValue;
es decir, ¿necesito crear algún tipo de diccionario de índice de columnas y nombres de columnas cuando la tabla se crea inicialmente, o puedo obtener el índice del nombre de la columna más adelante sin hacer esto?
Prueba esto:
int index = row.Table.Columns["ColumnName"].Ordinal;
Puede usar DataColumn.Ordinal
para obtener el índice de la columna en DataTable
. Entonces, si necesita la siguiente columna como se mencionó, use Column.Ordinal + 1
:
row[row.Table.Columns["ColumnName"].Ordinal + 1] = someOtherValue;
Simplemente puede usar DataColumnCollection.IndexOf
Para que pueda obtener el índice de la columna requerida por nombre y luego usarlo con su fila:
row[dt.Columns.IndexOf("ColumnName")] = columnValue;