无法在gridview中找到控件并出现错误(索引超出范围)

时间:2015-03-28 14:49:04

标签: c# asp.net gridview

实际上我在gridview中找到LinkBut​​ton Control时遇到问题。 我有2个网格视图,其中一个在另一个网格视图中,所以我的问题是我无法获得第二个gridview的LinkBut​​ton的值,

这是我的代码

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
BorderStyle="None" DataSourceID="SqlDataSource2" GridLines="None">
<Columns>
    <asp:TemplateField ShowHeader="False">
        <ItemTemplate>
                    <table align="center" class="Table3">
                        <tr>
                            <td >
                            <asp:Label ID="lblID" runat="server" Visible="false" Text='<%# Eval("Food_ID") %>'></asp:Label>
                               <b> <%#Eval("Title")%></b>
                            </td>
                        </tr>
                        <tr>
                            <td align="center" class="ImgKidFood">
                                <asp:Image ID="Img"  Width="680px" Height="145px" ImageUrl='<%#Eval("Pictures") %>' runat="server" />
                            </td>
                        </tr>
                        <tr>
                            <td style="direction:rtl; text-align:right;">



                                <asp:GridView ID="ShowFoodMenu2" runat="server" AutoGenerateColumns="False" 
                                    BorderStyle="None" GridLines="None" ShowHeader="False" 
                                    DataSourceID="SqlDataSource1" Width="100%" 
                                     >
                                    <Columns>
                                        <asp:TemplateField>
                                            <ItemTemplate>
                                             <table align="center" class="TableListMenu">
                                            <tr>
                                            <td  class="Add">
                                            <asp:LinkButton ID="LinkButton2" CommandArgument="<%# Container.DataItemIndex %>" 
                                                    runat="server" CausesValidation="False" 
                                                    CommandName="Select" Text="Select"  
                                                    onclick="LinkButton2_Click" ></asp:LinkButton>



                                                </td>

                                                <td class="ToCenter">
                                                       <b><%#Eval("Title_Pr") %>
                                                       </b>

                                                  <asp:LinkButton ID="LinkButton12" runat="server" CommandArgument="<%# Container.DataItemIndex %>"  CommandName="Link2" Text='<%# Eval("Menu_ID") %>'></asp:LinkButton>
                                                </td>

                                                 <td class="PriceLeft">
                                                       <%#Eval("Price") %>
                                                </td>

                                            </tr>
                                        </table>
                                        <hr />
                                            </ItemTemplate>
                                        </asp:TemplateField>

                                    </Columns>
                                </asp:GridView>

                                <br /><br /><br />





                            </td>
                        </tr>
                    </table>


        </ItemTemplate>
    </asp:TemplateField>
</Columns>

你可以看到名为id的第二个gidview是ShowFoodMenu2,它在第一个girdview里面,它是id Giridview1。

并且我在第二个gridview中有两个Linkbuttons 其中一个保留值(即LinkBut​​ton12)和另一个(LinkBut​​ton2)用于单击它时在数据库中添加记录。

但是当我点击Linkbutton(LinkBut​​ton2)来显示Linkbutton12的值时,我会得到ann错误

这是错误

http://hidelion.com/Images/error.png

这是my.cs代码

  protected void LinkButton2_Click(object sender, EventArgs e)
    {

        GridView G = new GridView();
        G.FindControl("ShowFoodMenu2");
        System.Threading.Thread.Sleep(1000);
        LinkButton m = (LinkButton)sender;
        int i = Int32.Parse(m.CommandArgument);
        LinkButton LblMososID = (LinkButton)G.Rows[i].FindControl("LinkButton2");
       // LinkButton LblMososID2 = (LinkButton)G.Rows[i].FindControl("LinkButton12");



        Label1.Text = LblMososID.Text;
    }

那我怎么能解决这个问题??????

1 个答案:

答案 0 :(得分:0)

GridView G = new GridView();只是创建一个Gridview类的新实例,它不会自动找到你的gridview,你搞砸了,就这样,从linkbutton找到相应的行,从那一行获取控件你想操纵,这样做: -

protected void LinkButton2_Click(object sender, EventArgs e)
    {
        LinkButton LinkButton2 = sender as LinkButton;
        GridViewRow grdRow = (GridViewRow)LinkButton2.NamingContainer;
        LinkButton LinkButton12 = (LinkButton)grdRow.FindControl("LinkButton12 ");
        Label1.Text = LinkButton12.Text;
    }