web-dev-qa-db-fra.com

obtenir l'index de la colonne DataTable avec le nom

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?

40
Andy

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;
70
Tim Schmelter

Essaye ça:

int index = row.Table.Columns["ColumnName"].Ordinal;
30
Kell

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;
6
ebram khalil

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);
}
3
Tom Beech