【问题标题】:Looping through each element in a DataRow循环遍历 DataRow 中的每个元素
【发布时间】:2012-01-04 00:30:36
【问题描述】:

基本上,我有一个DataTable,如下所示:

我想为每行的每个元素运行一个具有参数的方法

AddProductPrice(SKU, Price, PriceBracket)

举个例子……

如果我们取第一行数据,该方法将潜在地运行 16 次,每次Total Price X 不为空一次。

所以对于第一行中的第一个总价,调用将是:

AddProductPrice(SKU, <Total Price 1 value>, 1)

那么对于第一行中的第二个总价,调用将是:

AddProductPrice(SKU, <Total Price 2 value>, 2)

请注意:对于 National Selling 元素,调用将是:

AddProductPrice(SKU, <National Selling value>, 16)

是否有一种巧妙的方法可以循环遍历 DataRow 中的每个元素以提高过程效率?

【问题讨论】:

  • 聪明”比什么? 做了什么?

标签: c# loops foreach


【解决方案1】:

对于每一行,遍历列,然后找到“总价”、“全国销售”的索引并相应地添加产品价格。

    for (int i = 0; i < dataTable.Rows.Count; i++)
    {
        DataRow myRow = dataTable.Rows[i];
        for (int j = 0; j < dataTable.Columns.Count; j++)
        {
            if (dataTable.Columns[j].ColumnName.IndexOf("Total Price") > 0)
            {
                AddProductPrice(SKU, myRow.ItemArray[j], j);
            }
            else if (dataTable.Columns[j].ColumnName.IndexOf("National Selling") > 0)
            {
                AddProductPrice(SKU, myRow.ItemArray[j], 16); //
            }
        }
    }

【讨论】:

    【解决方案2】:

    循环遍历 DataTable.Columns 集合并根据列名进行解析。

    for(int i=0;i < dt.Columns.Count; i++)
    {
      if (dt.Columns[i].ColumnName.StartsWith("Total Price"))
      {
        var curBracket = Convert.ToInt32(dt.Columns[i].ColumnName.SubString(11));
        AddProductPrice(SKU, curRow[dt.Columns[i].ColumnName, curBracket);
      }
    }
    

    【讨论】:

    • 干杯西蒙,我会试试看效果如何,你有电子邮件地址以防我开始遇到问题吗?
    【解决方案3】:

    您可以使用DataRowItemArray(类型object[])属性,并从列tab.Columns.IndexOf("Trade Price 1")tab.Columns.IndexOf("Trade Price 16") 遍历其元素。

    但请注意,如果列顺序因某种原因发生更改,您的代码可能会中断。安全的方法是通过索引器遍历项目 - row["Trade Price " + i]

    【讨论】:

      猜你喜欢
      • 2014-11-09
      • 1970-01-01
      • 2012-11-23
      • 2016-05-29
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多