Question

Nous utilisons les contrôles GridView dans certaines pages de notre projet que nous ne souhaitons pas modifier radicalement. Serait-il possible de créer une hiérarchie dans un gridview? Cela peut-il être réalisé en utilisant un GridView dans Gridview pour obtenir la relation parent-enfant?

Était-ce utile?

La solution

Oui, vous pouvez imbriquer GridViews les uns dans les autres. Voir l'article suivant.

Imbrication de GridViews

Autres conseils

oui, vous le pouvez, et c'est assez facile ...

la meilleure approche consiste à simplifier certains processus ObjectDataSource afin que l'ensemble du processus soit plus facile pour vous, ou bien sûr, vous pouvez lier la grille nasted dans l'événement paraent GridView OnRowDataBound, c'est à vous de décider:)

exemple:

<asp:GridView ID="gvGrandFather" runat="server" DataSourceID="odsGrandFather">
    <Columns>
        <asp:BoundField DataField="myField1" HeaderText="myText1" />
        <asp:BoundField DataField="myField2" HeaderText="myText2" />
        <asp:BoundField DataField="myField3" HeaderText="myText3" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:GridView ID="gvFather" runat="server" DataSourceID="odsFather">
                    <Columns>
                        <asp:BoundField DataField="myField1" HeaderText="myText1" />
                        <asp:BoundField DataField="myField2" HeaderText="myText2" />
                        <asp:BoundField DataField="myField3" HeaderText="myText3" />
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:GridView ID="gvSon" runat="server" DataSourceID="odsSon">
                                    <Columns>
                                        <asp:BoundField DataField="myField1" HeaderText="myText1" />
                                        <asp:BoundField DataField="myField2" HeaderText="myText2" />
                                        <asp:BoundField DataField="myField3" HeaderText="myText3" />
                                    </Columns>
                                </asp:GridView>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

<asp:ObjectDataSource ID="odsGrandFather" runat="server" DataObjectTypeName="Company" TypeName="CompanyDAO" SelectMethod="FindAll" />
<asp:ObjectDataSource ID="odsFather" runat="server" DataObjectTypeName="Employees" TypeName="EmployeesDAO" SelectMethod="FindByID">
    <SelectParameters>
        <asp:Parameter Name="myFieldInCompanyObject" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="odsSon" runat="server" DataObjectTypeName="Person"TypeName="PersonsDAO" SelectMethod="FindByID">
    <SelectParameters>
        <asp:Parameter Name="myFieldInEmployeesObject" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

imaginez que vous ayez votre objet Company comme

Company
  Field1
  Field2
  Field3
  Employees witch is List<Person>
    Field1
    Field2
    Field3
    Person  witch is List<Person>
      Field1
      Field2
      Field3

Il vous suffit de définir le DAO pour chacun et de renvoyer la liste ou l'objet lui-même comme

public class CompanyDAO
{
    private List<Company> Companies
    {
        get
        {
            List<Company> companies = HttpContext.Current.Session["Companies"] as List<Company>;
            if (companies == null)
                companies = new List<Company>();
            return companies;
        }
    }
    public CompanyDAO() { }

    [DataObjectMethod(DataObjectMethodType.Select)]
    public IEnumerable<Company> FindAll()
    {
        return this.Companies;
    }

    [DataObjectMethod(DataObjectMethodType.Select)]
    public IEnumerable<Company> FindByID(String CompanyID)
    {
        return (from c in this.Companies where c.ID == CompanyID select c).ToList();
    }
}

espérons que cela aide à voir la lumière au bout du tunnel;)

Découvrez Telerik, leur RadGrid a ce genre de choses prêtes à l'emploi (NestedHierarchy et detailtables)

http://demos.telerik.com/aspnet -ajax / Grid / Examples / Overview / DefaultCS.aspx

Bons articles sur ce sujet ici qui utilise ASP.NET AJAX et AJAX Control Toolkit pour le rendre pliable.

Les images GridView sont assez statiques. Nous utilisons XSLT si les tables sont plus complexes, donc nous en avons le contrôle ultime. Sinon, Microsoft fournit d’autres contrôles ASP.NET tels que le DataRepeater.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top