Ошибка: индекс был вне диапазона при обновлении нескольких строк в gridview

#asp.net

#asp.net

Вопрос:

Я пытаюсь обновить несколько строк в gridview одним нажатием кнопки, однако после завершения обновления в первые 10 раз, когда он выдает это сообщение об ошибке, индекс был вне диапазона. Должно быть неотрицательным и меньше размера коллекции. Имя параметра: индекс. У меня есть количество страниц и индексация страниц в gridview, но он не переходит на следующую страницу для завершения обновления.

  protected void Clear_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(DB);

        string name = HttpContext.Current.User.Identity.Name; //Gets current User.
       

        int a = 0;

       

        #region Update Barcode 

        DataTable TableP = (DataTable)ViewState["Product"];

        for (int i = 0; i < TableP.Rows.Count; i  )
        {
            Label barcode = (Label)Product.Rows[a].Cells[0].FindControl("Barcode");
            Label barcodeLocation = (Label)Product.Rows[a].Cells[1].FindControl("barcodeLocation");
            Label batchID = (Label)Product.Rows[a].Cells[4].FindControl("batchID");
            Label upc = (Label)Product.Rows[a].Cells[5].FindControl("UPC");

            SqlCommand cmd = new SqlCommand("spUpdateBarcode", con);

            con.Open();
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@BarcodeNo", barcode.Text);
            cmd.Parameters.AddWithValue("@userId", name);
            cmd.Parameters.AddWithValue("@lastupdate", DateTime.Now);
            cmd.Parameters.AddWithValue("@batch", batchID.Text);
            cmd.Parameters.AddWithValue("@BarcodeLocation", barcodeLocation.Text);
            cmd.Parameters.AddWithValue("@UPC", upc.Text);

            cmd.ExecuteNonQuery();
            con.Close();

            a  ;
        }


        GetBarcodeDetails();

        #endregion

       



    }
  

Комментарии:

1. Вы хотите обновить полный набор данных в постраничном gridview вместо текущей страницы?

2. Почему у вас есть обе i a переменные и? Просто используйте i only .

3. @JamshaidKamran, да, это то, что я хотел бы сделать

4. Вы включили подкачку на вашем GridView ?

5. да, я разрешил подкачку, чтобы быть правдой

Ответ №1:

Проблема здесь в том, что вы хотите обновить все строки, присутствующие в строке с данными, в то время как у вас нет этих строк, привязанных к элементу GridView управления, что означает, что вы не можете обновить больше, чем строки, которые вы привязали к GridView .

Для этого вам придется либо связать все строки, отключив подкачку (что не рекомендуется, если у вас много записей), либо вам следует вручную обновить ваш DataSource , который в случае, если это ваш DataTable объект. Вы изменяете его, а затем привязываете к GridView .

Вам нужно перебирать только связанные элементы, поскольку я вижу, что вы получаете значения из столбцов gridview. Это обновит только связанные строки, но не вызовет исключения, поскольку оно перебирает только те индексы, которые связаны с GridView

измените цикл, чтобы проходить только по связанным строкам:

 for (int i = 0; i < Product.Rows.Count; i  )
{
    // your code.
}
  

Комментарии:

1. Да, если вы внимательно прочитали, я предложил вам обновить ваш gridview для поддержки всех строк, чтобы заставить его работать. Удалить подкачку.

2. Я удалил подкачку