0

私はGridviewでLinkBut​​tonを使用しています。

Gridview でページングを実行しているときに、インデックスを null にできない、または範囲外のインデックスを作成できないというエラーが発生します。

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 コントロールを見つけてそれにテキストを割り当てます。

しかし、ページングを使用すると、ページング サイズがオーバーした後 (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 に答える