Gridview:指数超出范围

时间:2013-03-11 11:10:17

标签: c# asp.net gridview

我在3个不同的页面中有3个GridView控件。之前工作正常。 突然我收到了这条错误消息:

  

无效的回发或回调参数。使用<pages enableeventvalidation="true" />

启用了事件验证

所以我尝试将<@pages enableeventvalidation="false" />放在页面中。它仍然无法正常工作。 我从页面删除了这个命令。然后,当单击gridview中所有girdview控件的按钮时,另一条消息显示“索引超出范围”。

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

看起来gridview无法找到datakey(e.rowIndex的值正常),已经设置了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>

1 个答案:

答案 0 :(得分:0)

尝试在页面加载!ispostback方法上绑定Gridview ..

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

试试这个

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

注意:也请使用EnableeventValidation="false"