2013-03-11 2 views
0

У меня есть 3 элемента управления GridView на 3 разных страницах. Они работали нормально раньше. Внезапно я получил это сообщение об ошибке:Gridview: Индекс был за пределами допустимого диапазона

Недопустимый аргумент обратной связи или обратного вызова. Проверка события включена с помощью <pages enableeventvalidation="true" />

Так что я пытался поставить <@pages enableeventvalidation="false" /> на этой странице. Это все еще не сработало. Я удалил эту команду со страницы. Затем появляется другое сообщение: «Указатель был вне диапазона», когда нажимаете кнопки в gridview для всех элементов управления girdview.

int id = Convert.ToInt32(myGridView.DataKeys[e.RowIndex].Value) 

Похоже GridView не смог найти DataKey (значение e.rowIndex «s ОК), Datakeynames был установлен.

protected void gvItemCategory_RowDeleting(object sender, GridViewDeleteEventArgs e) { 

    int categoryId = Convert.ToInt32(gvItemCategory.DataKeys[e.RowIndex].Value); 

    CollectionCategory category = new CollectionCategory(); 
    category.CategoryId = categoryId; 
    category.Delete(); 
    ItemCateogryShowData(); 
} 

HTML:

<asp:GridView ID="gvItemCategory" runat="server" AutoGenerateColumns="False" 
OnRowCancelingEdit="gvItemCategory_RowCancelingEdit" 
    OnRowDeleting="gvItemCategory_RowDeleting" OnRowEditing="gvItemCategory_RowEditing" 
    DataKeyNames="CategoryId" OnRowUpdating="gvItemCategory_RowUpdating"> 
    <Columns> 
     <asp:TemplateField HeaderText="CateogoryName"> 
      <ItemTemplate> 
       <asp:Label ID="lblItemCategoryName" runat="server" Text='<%#Eval("CategoryName") %>'></asp:Label> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:TextBox ID="tbItemCateogryName" runat="server" Text='<%#Eval("CategoryName") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 
     <asp:CommandField ShowEditButton="True" ButtonType="Button" /> 
     <asp:CommandField ShowDeleteButton="True" /> 
    </Columns> 
    </asp:GridView> 
+0

Вы управляете чем-либо с помощью javascript (например, добавление элементов в раскрывающийся список)? Вы привязываете сетку к обратной передаче? Тогда индекс переходит в -1, который был бы вне допустимого диапазона. –

+0

Что происходит, когда вы пытаетесь включить eventValidation = "false" .. – coder

+0

после того, как putaveventValidation = "false" на странице, появилось сообщение об ошибке «Неверный ответ или обратный вызов», я мог видеть содержимое страницы. Но кнопки gridview имеют проблему – yilee

ответ

0

Попробуйте сшиваться Gridview на Pageload !ispostback метод ..

If(!isPostback) 
{ 
//your code here 
} 

Попробуйте

int categoryId = Convert.ToInt32(gvItemCategory.DataKeys[e.RowIndex].Value.Tostring()); 

ПРИМЕЧАНИЕ: Также используйте EnableeventValidation="false"

+0

Я пробовал, это не сработало. – yilee

+0

@ user2156481 какая ошибка u get. – coder

+0

Индекс был за пределами допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции. string id = myGridView.DataKeys [row.rowIndex] .value.ToString() – yilee

Смежные вопросы