循环遍历DataRow中的每个元素

时间:2011-11-22 16:10:49

标签: c# loops foreach

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

Enter image description here

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

的方法
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中的每个元素,以提高程序的效率?

3 个答案:

答案 0 :(得分:14)

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

    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); //
            }
        }
    }

答案 1 :(得分:3)

您可以使用ItemArray的{​​{1}}(object[]类型)属性,并将其DataRow列中的元素迭代到tab.Columns.IndexOf("Trade Price 1")

请注意,如果由于某种原因列顺序发生变化,您的代码可能会中断。安全的方法是通过索引器迭代项目 - tab.Columns.IndexOf("Trade Price 16")

答案 2 :(得分:3)

循环访问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);
  }
}
相关问题