Установить значение для всех строк в таблице данных без цикла for - PullRequest
9 голосов
/ 21 февраля 2011

Я пытаюсь установить одинаковое значение для всех строк для одного столбца в таблице данных без использования цикла for.Может кто-нибудь предложить какие-либо более быстрые методы для достижения того же.

Ответы [ 4 ]

14 голосов
/ 13 июля 2012

да, это возможно, даже без петли!Это можно сделать с помощью свойства Expression.Помните, что строковые значения должны быть заключены в кавычки, в противном случае он воспринимает это как другое имя столбца. 1

При этом для столбца 'col1' будет установлено строковое значение a:

preview.Columns["col1"].Expression = "'a'";

В столбце «col1» будет отображаться значение столбца «col2»:

preview.Columns["col1"].Expression = "col2";
10 голосов
/ 21 февраля 2011

Нет, если не считать foreach. Так или иначе, вам нужно будет зацикливаться.

Если вы используете версию DataTable, самый быстрый подход заключается в использовании средства доступа DataColumn, т.е.

var col = table.Columns["Foo"];
foreach(var row in table.Rows)
    row[col] = value;

В качестве альтернативы: поскольку это предположительно относится к базе данных, напишите TSQL вручную, чтобы установить все значения соответствующим образом (т. Е. С подходящим предложением where в TSQL).

update [theTable]
set [theColumn] = theValue
where --TODO - something sensible
4 голосов
/ 04 октября 2012

Рассматривали ли вы удаление и повторное добавление столбца со значением по умолчанию?

dt.Columns.Remove("FilterText")
dt.Columns.Add(New DataColumn() With {.ColumnName = "FilterText",
                                      .DataType = GetType(String),
                                      .DefaultValue = "Jam and chips"})

(при условии, что имя вашего столбца равно FilterText, и вы хотите установить его на "Jam and chips")

0 голосов
/ 02 марта 2018

Я столкнулся с проблемой такого типа, когда флажок «Выбрать все» использовался для установки столбца «sel» на 1 или 0, цикл foreach очень медленный, я взял идею из ответа @Jonathan, который является более быстрым, но с некоторыми незначительными изменениями, так как предложение With не работает в c #

dtEmpList.Columns.Remove("sel");
dtEmpList.Columns.Add(new DataColumn("sel",typeof(bool)(chkSelectAll.Checked ? "1" : "0")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...