将列附加到具有动态绑定值的现有数据表

时间:2015-03-23 14:25:58

标签: c# vb.net datatable

我在Vb中有以下数据表

   Id            Price
  -----          -------
   1231           100
   1232           150
   1235           150

我想在名为flag的数据表中添加第三列,其最后一位数为Id

如下所示:

    Id               Price         Flag
   -----            ------       ----------
    1231             100             1
    1232             150             2
    1235             150             5

如何将列附加到具有动态绑定值的现有数据表?

有没有办法可以在不使用For循环的情况下执行此操作?

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

首先需要添加DataColumn

table.Columns.Add("Flag", typeof(int));

现在您只需要相应地添加值:

foreach(DataRow row in table.Rows)
{
    int ID = row.Field<int>("ID");
    string lastDigit = ID.ToString().Last().ToString();
    row.SetField("Flag", int.Parse(lastDigit));
}

避免循环的唯一方法是首先用这些值填充它,例如,如果它是从数据库中填充的。因此,即使存在DataColumn.Expression方法(这不是这种情况),也会导致框架中出现循环。

答案 1 :(得分:0)

  

有没有办法可以在不使用For循环的情况下执行此操作?

是,使用以下expression添加计算列:

[id] % 10

示例(vb.net):

Using table As New DataTable()

    table.Columns.Add("Id", GetType(Integer))
    table.Columns.Add("Price", GetType(Decimal))

    table.Rows.Add(1231I, 100D)
    table.Rows.Add(1232I, 150D)
    table.Rows.Add(1235I, 150D)

    'Add a new computed column:                    expr
    table.Columns.Add("Flag", GetType(Integer), "[id] % 10")

    For Each row As DataRow In table.Rows
        Debug.WriteLine("{0}    {1}    {2}", row.ItemArray)
    Next

End Using

示例(C#):

using (DataTable table = new DataTable())
{

    table.Columns.Add("Id", typeof(int));
    table.Columns.Add("Price", typeof(decimal));

    table.Rows.Add(1231, 100M);
    table.Rows.Add(1232, 150M);
    table.Rows.Add(1235, 150M);

    //Add a new computed column:              expr
    table.Columns.Add("Flag", typeof(int), "[id] % 10");

    foreach (DataRow row in table.Rows)
    {
        Debug.WriteLine("{0}    {1}    {2}", row.ItemArray);
    }

}

输出:

1231    100    1
1232    150    2
1235    150    5