web-dev-qa-db-ja.com

DataRowの各要素をループする

基本的に、私は以下のようにDataTableを持っています:

Enter image description here

パラメータを持つ行ごとの要素ごとにメソッドを実行したい

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の各要素をループする賢い方法はありますか?

13
swade1987

各行について、列をループし、「合計価格」、「全国販売」のインデックスを見つけて、それに応じて製品価格を追加します。

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

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
Simon

ItemArrayDataRow(type _object[]_)プロパティを使用して、列tab.Columns.IndexOf("Trade Price 1")からtab.Columns.IndexOf("Trade Price 16")までその要素を反復できます。

ただし、列の順序が何らかの理由で変更されると、コードが壊れる可能性があります。安全な方法は、インデクサー-_row["Trade Price " + i]_を介して項目を反復処理することです。

3
MagnatLU