it-swarm.com.de

Ruft den Index der DataTable-Spalte mit dem Namen ab

Ich habe einen Code, der den Wert von Zellen in einer DataRow anhand des Spaltennamens festlegt, d. H.

row["ColumnName"] = someValue;

Ich möchte auch den Wert für diese Zeile in der Spalte unmittelbar rechts von der oben angegebenen festlegen. Es ist klar, dass dies einfach wäre, wenn ich die Zelle nach Index anstatt nach Spaltenname erhalten würde. Gibt es eine Möglichkeit, den Spaltenindex aus dem Spaltennamen zu erhalten, sodass ich Folgendes tun kann:

row[index + 1] = someOtherValue;

muss ich beim erstmaligen Erstellen der Tabelle eine Art Wörterbuch mit Spaltenindex und Spaltennamen erstellen oder kann ich den Index später aus dem Spaltennamen abrufen, ohne dies zu tun?

40
Andy

Sie können DataColumn.Ordinal um den Index der Spalte im DataTable zu erhalten. Wenn Sie also die nächste Spalte wie angegeben benötigen, verwenden Sie Column.Ordinal + 1:

row[row.Table.Columns["ColumnName"].Ordinal + 1] = someOtherValue;
70
Tim Schmelter

Versuche dies:

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

Sie können einfach DataColumnCollection.IndexOf verwenden

Damit Sie den Index der gewünschten Spalte nach Namen abrufen können, verwenden Sie ihn mit Ihrer Zeile:

row[dt.Columns.IndexOf("ColumnName")] = columnValue;
6
ebram khalil

Ich habe eine Erweiterungsmethode von DataRow geschrieben, mit der ich das Objekt über den Spaltennamen bekomme.

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

Und so heißt es:

DataTable data = LoadDataTable();
foreach (DataRow row in data.Rows)
{        
    var obj = row.Column("YourColumnName");
    Console.WriteLine(obj);
}
3
Tom Beech