Цикл по каждому элементу в DataRow - PullRequest
11 голосов
/ 22 ноября 2011

По существу, у меня есть 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)

Обратите внимание: для элемента «Национальные продажи» вызов будет:

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

Есть ли умный способ перебрать каждый элемент в DataRow, чтобы сделать процедуру более эффективной?

Ответы [ 3 ]

14 голосов
/ 22 ноября 2011

Для каждой строки, циклически проходя по столбцам, а затем находя индексы «Общая цена», «Национальные продажи» и соответственно добавляя цену товара.

    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); //
            }
        }
    }
3 голосов
/ 22 ноября 2011

Перебрать коллекцию 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 голосов
/ 22 ноября 2011

Вы можете использовать свойство ItemArray (type object[]) для DataRow и перебирать его элементы от столбца tab.Columns.IndexOf("Trade Price 1") до tab.Columns.IndexOf("Trade Price 16").

Будьте осторожны, если по какой-то причине порядок столбцов изменится, ваш код может сломаться. Безопасным способом было бы перебирать элементы с помощью индексатора - row["Trade Price " + i].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...