0

我在 Gridview 中使用 LinkBut​​ton。

在 Gridview 中进行分页时,它会给出一个错误,即索引不能为空/索引超出范围。

如果假设 PageSize=10 那么在 10 之后它找不到 LinkBut​​ton 所以它给出了错误消息。

所以我该怎么做 ?

    <asp:GridView ID="grid_inbox" runat="server" AutoGenerateColumns="False" GridLines="Horizontal"
        OnRowCommand="grid_inbox_RowCommand" EmptyDataText="No Data Found..!!" Width="100%"
        BackColor="White" BorderColor="#E5E5E5" BorderStyle="None" BorderWidth="1px"
        CellPadding="4" ForeColor="#222222" RowStyle-Height="35" AllowPaging="true" PageSize="12">
        <Columns>
            <asp:TemplateField HeaderStyle-Width="3%" FooterStyle-Width="3%" ItemStyle-Width="3%">
                <ItemTemplate>
                    <asp:CheckBox ID="Delete_CheckBox" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Message">
                <ItemTemplate>
                    <asp:HyperLink ID="Message_hl" runat="server" Font-Overline="false" ForeColor="Black"
                        Text='<%#Eval("message") %>' NavigateUrl='<%# String.Format("~/Templet/SendBox_DisplayList.aspx?inbox_id1={0}",Eval("inbox_id")) %>'>HyperLink</asp:HyperLink>
                </ItemTemplate>
            </asp:TemplateField>
            <%--            <asp:BoundField DataField="message" HeaderText="Message" />--%>
            <asp:BoundField DataField="Message_From1" HeaderText="Message From" HeaderStyle-Width="12%"
                FooterStyle-Width="12%" ItemStyle-Width="12%"></asp:BoundField>
            <asp:BoundField DataField="message_to" HeaderText="Message To" HeaderStyle-Width="12%"
                FooterStyle-Width="12%" ItemStyle-Width="12%"></asp:BoundField>
            <asp:TemplateField HeaderStyle-Width="13%" FooterStyle-Width="13%" ItemStyle-Width="13%">
                <ItemTemplate>
                    <asp:LinkButton runat="server" ID="lnk_reply" ForeColor="Maroon" Text="Reply" CommandName="Reply"
                        CommandArgument="<%#((GridViewRow)Container).RowIndex%>"></asp:LinkButton>
                    &nbsp;
                    <asp:LinkButton runat="server" ID="lnk_reject" ForeColor="Maroon" Text="Reject" CommandArgument="<%#((GridViewRow)Container).RowIndex%>"
                        CommandName="Reject"></asp:LinkButton>
                    &nbsp;
                    <asp:LinkButton runat="server" ID="lnk_accept" ForeColor="Maroon" CommandName="Accept"
                        CommandArgument='<%#Eval("inbox_id")%>' Text="Accept"> </asp:LinkButton>
                    <asp:HiddenField runat="server" ID="hdf" Value='<%#Eval("message") %>' />
                    <asp:HiddenField runat="server" ID="hdf_inbox_id" Value='<%#Eval("inbox_id")%>' />
                    <asp:HiddenField runat="server" ID="hdf_msg_to_name" Value='<%#Eval("Message_From")%>' />
                    <asp:HiddenField runat="server" ID="hdf_message_from" Value='<%#Eval("Message_From1")%>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#CCCC99" ForeColor="#222222" />
        <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Left" />
        <HeaderStyle BackColor="White" Font-Bold="True" BorderColor="#E5E5E5" Height="35px"
            ForeColor="#222222" HorizontalAlign="Left" />
        <SelectedRowStyle BackColor="#F5F5F5" Font-Bold="True" ForeColor="White" />
    </asp:GridView>

而cs代码是...

   for (int i = 0; i < j; i++)
    {
        int level_from = Int32.Parse(dt.Rows[i]["level_from"].ToString());
        int level_to = Int32.Parse(dt.Rows[i]["level_to"].ToString());
        LinkButton reply_btn1 = grid_inbox.Rows[i].Cells[0].FindControl("lnk_reply") as LinkButton;

        HyperLink msg = grid_inbox.Rows[i].Cells[0].FindControl("Message_hl") as HyperLink;

        //Show message upto 100 character
        string submsg = dt.Rows[i]["message"].ToString();
        int msglen = submsg.Length;
        if (msglen < 100)
        {
            submsg = submsg.Substring(0, msglen);
        }
        else
        {
            submsg = submsg.Substring(0, 100);
        }
        msg.Text = submsg;

它会做的是,它找到 HyperLink/LinkBut​​ton 控件并为其分配一个文本。

但是如果我使用 Paging 然后在 Paging Size 结束后(假设 PageSize=10),它找不到 HyperLink 控件。因为现在 pageIndex 从 1 变成了 2。

4

1 回答 1

0

我认为您需要在使用分页时在网格视图中管理 onselectedindexchanged ..

<asp:GridView ID="grid_inbox" runat="server" AutoGenerateColumns="False" GridLines="Horizontal"
        OnRowCommand="grid_inbox_RowCommand" EmptyDataText="No Data Found..!!" Width="100%"
        BackColor="White" BorderColor="#E5E5E5" BorderStyle="None" BorderWidth="1px"
        CellPadding="4" ForeColor="#222222" RowStyle-Height="35" 
        AllowPaging="true" PageSize="12" 
        onselectedindexchanged="grid_inbox_SelectedIndexChanged">

在 CS

protected void grid_inbox_SelectedIndexChanged(object sender, EventArgs e)
{
    //Do your stuff
}

请按照下面的 url 维护 gridview 中的 分页 GridView 分页和排序

于 2013-03-29T12:51:27.013 回答