【问题标题】:Loop through a datatable, get value and Header循环遍历数据表,获取值和表头
【发布时间】:2017-06-12 04:50:54
【问题描述】:

我有一个由datatable 填充的grid

我想要实现的是循环遍历选中的每个rowcolumn,并将一组值存储在变量中,以便我可以更新表格。 p>

例如,循环应该从P1开始,将431/、P1和88.2的值存储到三个变量中:

string sub = '431/'  
string code = 'P1'
decimal newbaseprice = 88.2

执行更新:

UPDATE MyPriceTable
SET BasePrice = newbaseprice
WHERE PartNum = sub and ListCode=code

以此类推,直到更新 P2 和 P3。

到目前为止,我已经能够从特定行中获取值,但我不知道如何获取列名并将其应用于我的更新。

foreach(DataRow row in ((DataTable)this.grdPart.DataSource).Select("Seleccionar= true"))
        {
            string sub = row["SUB"].ToString();
            string p1 = row["P1"].ToString();
            string p2 = row["P2"].ToString();
            string p3 = row["P3"].ToString();
}

有人有其他方法来解决这个问题吗?

【问题讨论】:

    标签: c# sql winforms datatable


    【解决方案1】:

    问题是您在网格上绑定了数据,想知道如何更新网格后面的数据,然后刷新您的网格。

    您的第一个问题是多个选择会导致您在循环中覆盖。这将使所有值都等同于最近的迭代,这没有帮助。我建议创建一个私有嵌套类来处理这个问题。

    private class DItem
    {
       public string sub {get;set;}
       public string p1 {get;set;} 
       public string p2 {get;set;}
       public string p3 {get;set;}
    }
    

    然后你这样使用它:

    var litms = new List<DItem>()
    foreach(DataRow row in ((DataTable)this.grdPart.DataSource).Select("Seleccionar= true"))
            {
                var item = new DItem();
                item.sub = row["SUB"].ToString();
                item.p1 = row["P1"].ToString();
                item.p2 = row["P2"].ToString();
                item.p3 = row["P3"].ToString();
                litms.Add(item);
            } 
    

    然后您可以使用 Linq 调用您的班级列表并以这种方式分配值,或者(正确的方式)使用值更新您的 DataTable 并重新绑定。您可以使用列名或它们的索引,以使名称无关紧要。

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多