私はGridviewでLinkButtonを使用しています。
Gridview でページングを実行しているときに、インデックスを null にできない、または範囲外のインデックスを作成できないというエラーが発生します。
PageSize=10 とすると、10 以降は LinkButton が見つからないため、エラー メッセージが表示されます。
それで、私は何をすべきですか?
<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>
<asp:LinkButton runat="server" ID="lnk_reject" ForeColor="Maroon" Text="Reject" CommandArgument="<%#((GridViewRow)Container).RowIndex%>"
CommandName="Reject"></asp:LinkButton>
<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/LinkButton コントロールを見つけてそれにテキストを割り当てます。
しかし、ページングを使用すると、ページング サイズがオーバーした後 (PageSize=10 と仮定)、HyperLink コントロールが見つかりませんでした。pageIndex が 1 から 2 に変更されたためです。