#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. Я удалил подкачку