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

cannot find controls in gridview and get an error(Index was out of range)

实际上,我在 gridview 中查找 LinkBut​​ton 控件时遇到了问题。 我有 2 个网格视图,其中一个在另一个网格视图中,所以我的问题是我无法获得第二个网格视图的 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 中有两个链接按钮 其中一个保留值(LinkBut​​ton12),另一个(LinkBut​​ton2)用于当我单击它时在数据库中添加一条记录。

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

这里是错误

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;
    }

那么我该如何解决这个问题呢??????

GridView G = new GridView();新建一个Gridview实例class,它不会自动找到你的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;
    }