基本上,我有一个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
中的每个元素,以提高程序的效率?
答案 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);
}
}