J'ai un code qui définit la valeur des cellules dans un DataRow par nom de colonne i.e.
row["ColumnName"] = someValue;
Je souhaite également définir la valeur de cette ligne dans la colonne immédiatement à droite de celle trouvée ci-dessus. Clairement, si j’obtenais la cellule par index plutôt que par nom de colonne, ce serait facile. Existe-t-il donc un moyen d’obtenir l’index de colonne à partir du nom de colonne me permettant ainsi de faire:
row[index + 1] = someOtherValue;
c.-à-d. dois-je créer une sorte de dictionnaire d'index de colonne et de noms de colonne lors de la création initiale de la table, ou puis-je obtenir l'index du nom de colonne ultérieurement sans le faire?
Vous pouvez utiliser DataColumn.Ordinal
pour obtenir l'index de la colonne dans le DataTable
. Donc, si vous avez besoin de la colonne suivante, utilisez Column.Ordinal + 1
:
row[row.Table.Columns["ColumnName"].Ordinal + 1] = someOtherValue;
Essaye ça:
int index = row.Table.Columns["ColumnName"].Ordinal;
Vous pouvez simplement utiliser DataColumnCollection.IndexOf
Pour que vous puissiez obtenir l'index de la colonne requise par nom, utilisez-le avec votre ligne:
row[dt.Columns.IndexOf("ColumnName")] = columnValue;
J'ai écrit une méthode d'extension de DataRow qui me permet d'obtenir l'objet via le nom de la colonne.
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));
}
Et ça s'appelle comme ça:
DataTable data = LoadDataTable();
foreach (DataRow row in data.Rows)
{
var obj = row.Column("YourColumnName");
Console.WriteLine(obj);
}