2009-03-30 2 views
0

J'ai la structure suivante dans une page ASPX:Comment trouver l'Asp: GridView imbriqué dans le code suivant?

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

Les panneaux sont utilisés pour la CollapsiblePanelExtender de la Ajax Control Toolkit.

Je suis en train d'utiliser FindControl pour trouver les gvDetails contrôle dans le code-behind, mais ma dernière tentative n'a pas fonctionné, ce qui est dans le cas gvMaster_RowCreated:

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

où e est GridViewRowEventArgs

Je fais fondamentalement ce qui était sur cette page, mais je n'utilise pas un SqlDataSource, cependant, la personne trouve fondamentalement le SqlDataSource par l'intermédiaire du FindControl de l'argument e passé de l'événement de RowCreated. Voici le lien:

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

Répondre

1

Voici un code derrière méthode qui a fonctionné pour moi:

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

Est-ce votre application lancer une exception? Qu'est-ce qui ne fonctionne pas correctement?

+0

J'ai essayé cela, comme vous avez ci-dessus, mais je l'ai fait de la manière suivante qui a renvoyé une valeur nulle: GridView gv = e.Row.FindControl ("gvDetails") comme GridView; – Xaisoft

+0

J'ai essayé votre extrait ci-dessus et quand je franchis, gv est nul. – Xaisoft

+0

Je suppose que je suis perplexe. Pardon! La seule chose que j'essaierais, c'est d'utiliser l'événement RowDataBound au lieu de RowCreated, mais c'est probablement long. –

1

Je ne crois pas qu'un GridView peut avoir des contrôles enfants comme ça.

+0

De quels contrôles enfants parlez-vous? – Xaisoft

+0

Regardez ma question éditée. – Xaisoft

0

Vous devez placer le panneau dans un champ de modèle. Vous pouvez essayer quelque chose comme ceci:

<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 --%> 
+0

Oui, c'est effectivement la façon dont le code est. Je l'ai juste enlevé pour plus de clarté et maintenant j'essaye de trouver le GridView de gvDetails dans le Code Behind. Je vais mettre à jour ma question avec le champ de modèle. – Xaisoft