ASP.NET: Peut-on utiliser GridView pour créer une hiérarchie?
-
19-08-2019 - |
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?
La solution
Oui, vous pouvez imbriquer GridViews les uns dans les autres. Voir l'article suivant.
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.