基本的に、私は以下のようにDataTable
を持っています:
パラメータを持つ行ごとの要素ごとにメソッドを実行したい
AddProductPrice(SKU, Price, PriceBracket)
例として...:
データの最初の行を取得すると、メソッドは16回実行される可能性があり、毎回1回実行されますTotal Price X
はnullではありません。
したがって、最初の行の最初の合計価格の場合、呼び出しは次のようになります。
AddProductPrice(SKU, <Total Price 1 value>, 1)
次に、最初の行の2番目の合計価格の場合、呼び出しは次のようになります。
AddProductPrice(SKU, <Total Price 2 value>, 2)
注:全国販売要素の場合、呼び出しは次のようになります。
AddProductPrice(SKU, <National Selling value>, 16)
プロシージャをより効率的にするためにDataRow
の各要素をループする賢い方法はありますか?
各行について、列をループし、「合計価格」、「全国販売」のインデックスを見つけて、それに応じて製品価格を追加します。
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); //
}
}
}
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);
}
}
ItemArray
のDataRow
(type _object[]
_)プロパティを使用して、列tab.Columns.IndexOf("Trade Price 1")
からtab.Columns.IndexOf("Trade Price 16")
までその要素を反復できます。
ただし、列の順序が何らかの理由で変更されると、コードが壊れる可能性があります。安全な方法は、インデクサー-_row["Trade Price " + i]
_を介して項目を反復処理することです。