Последняя строка таблицы данных asp.net - PullRequest
0 голосов
/ 07 августа 2020

У меня проблема, когда я пытаюсь ввести al oop в DataTable, который содержит набор данных.

Я делаю al oop вот так:

for(int i = 0; i<ds.Tables[0].Rows.Count - 1  ; i++)

Проблема в том, что я не могу получить значение последней строки с этой, но если я попытаюсь избавиться от «-1» и сделаю al oop для всей таблицы, у меня будет выход исключения диапазона.

Это исключение вне диапазона связано с тем, что я должен проверить, равно ли значение строки «i» значению строки «i + 1», например:

if (ds.Tables[0].Rows[i]["Release_No"] != ds.Tables[0].Rows[i + 1]["Release_No"])

Итак, если я сделаю это в al oop, когда индекс находится в последней строке, он проверит, равна ли последняя строка i + 1, и она вне таблицы.

Итак, я пытался проверить, находится ли индекс в последней строке, а затем просто получить значение последней строки, но похоже, что это не работает.

if(ds.Tables[0].Rows.IndexOf(ds.Tables[0].Rows[i]) == ds.Tables[0].Rows.Count)

Если у кого-то есть идея, дайте мне знать, и, конечно, если это будет недостаточно ясно, дайте мне знать, я дам больше информации и больше кода.

Спасибо за вашу помощь и ваше время!

Ответы [ 3 ]

0 голосов
/ 07 августа 2020

Сначала проверьте, последняя ли это запись.

Мне нравится рефакторинг кода, чтобы он читался как можно ближе к форме предложения, объясняя, что вы хотите, используя именованные переменные и

Попробуйте заставить каждую строку кода делать что-то одно, и только одно, например, проверять, является ли это последней строкой:

var data = ds.Tables[0].Rows;
var lastRow = data.Count - 1;

for(int i = 0; i < lastRow ; i++)
{
   if (i == lastRow){
      // This is the last row. Handle the last row here.
   } 
   else
   {
      // Handle all other rows here
      var currentRecord = data[i];
      var nextRecord = data[i + 1];
      if (currentRecord["Release_No"] != nextRecord["Release_No"])
      {
         // Handle unique Releases...
      }
   }

}
0 голосов
/ 07 августа 2020

как то лучше?

        var lastRow = data.Count - 1;
        var data = ds.Tables[0].Rows;

        for(int i = 0; i< lastRow; i++)
        {
            testFirstCum = Convert.ToInt32(ds.Tables[0].Rows[i]["EDI_Accum_Quantity"]);

            if ( i == lastRow)
            {
                if (DBNull.Value.Equals(data[i]))
                {
    
                   
                    quantity = 0;
                }
                else
                {
                    quantity = Convert.ToInt32(data[i]);

                    testFirstCum = testFirstCum + quantity;
                    System.Diagnostics.Debug.WriteLine(quantity);
                    System.Diagnostics.Debug.WriteLine(testFirstCum);
                }

            }
            else
            {
                var col = ds.Tables[0].Columns;
                var currentRecord = data[i];
                var nextRecord = data[i + 1];
                if(currentRecord["Release_No"] != nextRecord["Release_No"])
                {
                    for (int j = col[2].Ordinal; j < col.Count; j++)
                    {
                        if (DBNull.Value.Equals(data[i][j]))
                        {

                            quantity = 0;
                        }
                        else
                        {
                            quantity = Convert.ToInt32(data[i][j]);

                            testFirstCum = testFirstCum + quantity;
                            System.Diagnostics.Debug.WriteLine(quantity);
                            System.Diagnostics.Debug.WriteLine(testFirstCum);
                        }
                    }

                }
            }
        }
0 голосов
/ 07 августа 2020

Используйте less than or equal to вот так

for(int i = 0; i<=ds.Tables[0].Rows.Count - 1 ; i++)

Надеюсь, вы получите то, что хотите.

...