"指数超出范围" ASP.NET GridView中的按钮出错

时间:2016-04-07 15:52:27

标签: asp.net linq gridview

我有一个使用LINQ数据源的GridView。在我的Page_Load中,我正在做

Using rah As New LinqDataContext(LinqConnectionString)
                GridView1.DataSource = From l In rah.Links _
                                        Where l.CategoryID = CategoryDropDown.SelectedValue _
                                        Order By l.Name _
                                        Select l.LinkID, _
                                        l.Name, _
                                        l.URL, _
                                        l.Comment, _
                                        l.QuickLink

                GridView1.DataBind()

End Using

到目前为止它似乎工作正常,我可以看到在运行页面时GridView中显示的记录。

GridView中的每一行在最后一列中都有一个删除按钮:

<asp:ButtonField ButtonType="Button" CommandName="del" Text="Delete Link" />

(我还在TemplateField和ItemTemplate中尝试了asp:按钮)

我的问题是,当单击按钮时,它在事件处理程序的第一行代码上失败:

Private Sub GridView1_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GridView1.RowCommand

Dim ID As String = GridView1.DataKeys(e.CommandArgument).Value.ToString

错误是&#34;索引超出范围。必须是非负数且小于集合的大小。&#34;,因此由于某种原因它没有正确传递行索引。

我的GridView代码如下:

<asp:GridView CssClass="Grid" ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="LinkID" CellPadding="5">

    <Columns>

    <asp:TemplateField HeaderText="Name">
        <ItemTemplate>
            <asp:Label ID="lblName"  runat="server" Text='<%#: Bind("Name")%>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>

    <asp:TemplateField HeaderText="URL">
        <ItemTemplate>
            <asp:HyperLink ID="hyperURL" runat="server" Text='<%#: Bind("URL")%>' NavigateUrl='<%# "../GoToURL.aspx?url=" & Server.UrlEncode(Eval("URL"))%>'></asp:HyperLink>
        </ItemTemplate>

    </asp:TemplateField>

    <asp:TemplateField HeaderText="Comment">
        <ItemTemplate>
            <asp:Label ID="lblComment"  runat="server" Text='<%#: Bind("Comment")%>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>

        <asp:TemplateField HeaderText="Quick Link">
        <ItemTemplate>
            <asp:Label ID="lblQuickLink"  runat="server" Text='<%# Bind("QuickLink")%>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>

        <asp:ButtonField ButtonType="Button" CommandName="del" Text="Delete Link" />


    </Columns>

</asp:GridView>

帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

您的ButtonField没有设置CommandArgument属性;所以CommandArgument将为空或null,这不在该集合中。我认为DataKeys需要一个整数(因为它是一个数组),命令参数是一个字符串,你也可能遇到类型转换错误?

答案 1 :(得分:0)

感谢您的回复,但我最终搞清楚了问题。这是我在这里没有发布的代码。如果您愿意,可以删除此问题。