循环遍历数据表,获取值和标题

时间:2017-01-26 16:23:21

标签: c# sql winforms datatable

我有一个CREATE TEMP TABLE tmp_x AS SELECT * FROM "Schema"."Table" LIMIT 0; copy tmp_x FROM '\\PATH\TO\CSV\FILE.csv' DELIMITER ',' CSV` 来自grid

Grid

我想要实现的目标是遍历每个datatable& row 已选择,并将值集存储在变量上,以便我可以更新表格。

因此,例如,循环应以 P1 开头,将值431 /,P1和88.2存储到三个变量中:

column

执行更新:

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

等等直到P2& P3已更新。

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

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

有人有另外一种方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

问题是你在网格上是DataBound并想知道如何更新网格后面的数据,然后刷新你的网格。

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

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并重新绑定。您可以使用列名称或它们的indeces,以使名称无关紧要。