ADO.NET - 手动填写列

时间:2009-07-20 22:27:32

标签: .net ado.net datatable dataset

(使用Visual Studio 2005 / .NET 2.0)

我有一个DataSet,它是使用SQL从另一个模块预先填充的。它中的所有值都很好,并且保持不变。

但是一旦我检索DataSet(并将其分配给DataTable,因为它是一个表集),我需要在DataTable的末尾添加一个额外的列,并根据每行中的值填充它。

作为一个简化的例子,比如说:

需要检查第1列的值。如果它们等于“A”,则新列应设置为“G”。 “B”,同样“H”,“C”同样“I”。

我需要做的是遍历表格,检查每一行的值并相应地填充该行的新列。

我无法找到执行此操作的方法(最具体地说,设置DataColumn的值,通过名称或其他标识符识别它 - 数组也可以)并且可以使用一些代码段或指导。

这看起来相当简单,但我无法找到有关如何在我看过的任何地方做到这一点的信息。提前谢谢......

3 个答案:

答案 0 :(得分:1)

DataColumn dc = dt.Columns.Add("columnName", typeof(whatever));
foreach (DataRow dr in dt.Rows) {
    dr[dc] = CalculateFromOtherColumns(dr);
}

答案 1 :(得分:1)

您可以通过以编程方式创建列来执行此操作,然后使用新列的名称,根据您需要的条件填充该列。

这是一个显示我的意思的片段:

    ...
    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

答案 2 :(得分:0)

如果comparisson很简单,您可能需要在数据表中使用表达式列(检查Columns.Add的重载以获取更多信息和MSDN)

否则,您应该首先通过Columns.Add添加一个正常的列,使用正确的数据类型(从您编写的字符串或者布尔值,根据您希望在该列中的true / false有点值判断)

之后,在每一行上做一个foreach:

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

是的,你应该进行类型检查,你可以让这段代码更短(但我现在正在iPhone上打字:))