ADO.NET - заполнение столбца вручную - PullRequest
0 голосов
/ 21 июля 2009

(с использованием Visual Studio 2005 / .NET 2.0)

У меня есть DataSet, который заполняется из другого модуля с использованием SQL. Все значения в нем в порядке и останутся такими же, как они.

Но как только я получаю DataSet (и назначаю его в DataTable, так как это набор из одной таблицы), мне нужно добавить дополнительный столбец в конец DataTable и заполнить его на основе значений в каждой строке.

В качестве упрощенного примера, скажем, например:

Необходимо проверить значения столбца 1. Если они равны «A», новый столбец должен быть установлен на «G». «B», аналогично «H» и «C», аналогично «I».

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

У меня возникают проблемы с поиском способа сделать это (в частности, для установки значения DataColumn, идентифицирующего его по имени или по другому идентификатору - массив будет в порядке) и может использовать некоторые фрагменты кода или руководство.

Это кажется довольно простым, но я не могу найти информацию о том, как это сделать, где бы я ни смотрел. Заранее спасибо ...

Ответы [ 3 ]

1 голос
/ 21 июля 2009

Вы можете сделать это путем программного создания столбца, а затем, используя имя нового столбца, заполнить его в соответствии с любыми условиями.

Вот фрагмент, который показывает, что я имею в виду:

    ...
    yourDataTable.Columns.Add("MyNewColumn");

    foreach (DataRow row in yourDataTable.Rows) {
        string column1Value = row["Column1"].ToString();
        if (column1Value == "A") {
            row["MyNewColumn"] = "G";
        } else if (column1Value == "B") {
            row["MyNewColumn"] = "H";
        } else if (column1Value == "C") {
            row["MyNewColumn"] = "I";
        }
    }
    ...

Это то, что вы ищете?

-Jay

1 голос
/ 21 июля 2009
DataColumn dc = dt.Columns.Add("columnName", typeof(whatever));
foreach (DataRow dr in dt.Rows) {
    dr[dc] = CalculateFromOtherColumns(dr);
}
0 голосов
/ 21 июля 2009

Если сравнение простое, возможно, вы захотите использовать столбец выражений в вашей таблице данных (проверьте перегрузки Columns.Add для получения дополнительной информации и MSDN)

В противном случае вы должны сначала добавить нормальный столбец через столбцы. Добавьте с правильным типом данных (из того, что вы пишете, или, возможно, логическое значение, судя по значениям типа true / false, которые вы хотите в этом столбце)

После этого выполните foreach для каждого из рядов:

foreach (DataRow row in table.Rows)
  if (row["columnA"] == "A")
    row["columnX"] = "G";
  else
    row["columnX"] = "F";

И да, вы должны сделать проверку типов, и вы можете сделать этот код намного короче (но я сейчас печатаю на iPhone :))

...