Подтвердить что ты не робот

Получить индекс столбца DataTable с именем

У меня есть код, который устанавливает значение ячеек в DataRow по имени столбца i.e.

row["ColumnName"] = someValue;

Я хочу также установить значение для этой строки в столбце сразу справа от найденного выше. Очевидно, что если бы я получал ячейку по индексу, а не по имени столбца, это было бы легко. Итак, есть способ получить индекс столбца от имени столбца, что позволяет мне делать:

row[index + 1] = someOtherValue;

то есть. мне нужно создать какой-то словарь индексов столбцов и имен столбцов при первоначальной создании таблицы, или я могу получить индекс из имени столбца позже, не делая этого?

4b9b3361

Ответ 1

Вы можете использовать DataColumn.Ordinal, чтобы получить индекс столбца в DataTable. Поэтому, если вам нужен следующий столбец, как упоминалось, используйте Column.Ordinal + 1:

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

Ответ 2

Попробуйте следующее:

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

Ответ 3

Вы можете просто использовать DataColumnCollection.IndexOf

Чтобы вы могли получить индекс нужного столбца по имени, используйте его со своей строкой:

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

Ответ 4

Я написал метод расширения DataRow, который получает мне объект через имя столбца.

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

И его вызов выглядит следующим образом:

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