Как найти вложенный Asp: GridView в следующем коде? - PullRequest
0 голосов
/ 30 марта 2009

У меня есть следующая структура на странице aspx:

<asp:Panel ID="pnlCust" runat="server">
    <asp:GridView ID="gvMaster" runat="server" 
                  OnRowCreated="gvMaster_RowCreated">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlMaster" runat="server">
                        //...
                    </asp:Panel>
                    <asp:Panel ID="pnlDetails" runat="server">
                        <asp:GridView ID="gvDetails" runat="server">
                            <Columns>
                                //...
                            </Columns>
                        </asp:GridView>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
</asp:Panel>

Панели используются для CollapsiblePanelExtender из Ajax Control Toolkit.

Я пытаюсь использовать FindControl, чтобы найти элемент управления gvDetails в выделенном коде, но моя последняя попытка не сработала, что происходит в событии gvMaster_RowCreated:

GridView gv =  
e.Row.FindControl("pnlDetails").FindControl("gvDetails") as GridView;

где e - GridViewRowEventArgs

В основном я делаю то, что было на этой странице, но я не использую SqlDataSource, однако человек в основном находит SqlDataSource через FindControl из аргумента e, переданного из события RowCreated. Вот ссылка:

http://mosesofegypt.net/post/2008/02/Building-a-grouping-Grid-with-GridView-and-ASPNET-AJAX-toolkit-CollapsiblePanel.aspx

Ответы [ 3 ]

1 голос
/ 31 марта 2009

Вот метод кода, который работал для меня:

protected void gvMaster_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow) {
        GridView gv = (GridView)e.Row.FindControl("gvDetails");
    }
}

Выдает ли ваше приложение исключение? Что не работает должным образом?

1 голос
/ 30 марта 2009

Я не верю, что GridView может иметь такие дочерние элементы управления.

0 голосов
/ 31 марта 2009

Вам нужно поместить панель внутри поля шаблона. Вы можете попробовать что-то вроде этого:

<asp:Panel ID="pnlCust" runat="server"> 
    <asp:GridView ID="gvMaster" runat="server" >
        <columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlDetails" runat="server">
                        <asp:GridView ID="gvDtails" runat="server">
                            <columns>
                                <asp:TemplateField>
                                    <ItemTemplate>
                                        <%-- columns here --%>
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </columns>
                        </asp:GridView> <%-- end gvDetails --%>
                    </asp:Panel> <%-- end pnlDetails--%>
                </ItemTemplate>
            </asp:TemplateField>
        </columns>
    </asp:GridView> <%-- end gvMaster --%>
</asp:Panel> <%-- end pnlCust --%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...