ASP.NET:GridViewを使用して階層を作成できますか?
-
19-08-2019 - |
質問
プロジェクトの一部のページで大幅に変更したくないGridViewコントロールを使用していますが、gridviewで階層を作成することは可能ですか?これは、Gridview内でGridViewを使用して親子関係を取得することで実現できますか?
解決
はい、GridViewを相互にネストできます。次の記事を参照してください。
他のヒント
はい、できます。非常に簡単です...
最良のアプローチは、プロセス全体をより簡単にするためにいくつかのObjectDataSourceを使用することです。または、もちろん、親のgridview OnRowDataBoundイベントで、nasted gridviewをバインドできます。それはすべてあなた次第です:)
例:
<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>
次のようなCompanyオブジェクトがあると想像してください
Company
Field1
Field2
Field3
Employees witch is List<Person>
Field1
Field2
Field3
Person witch is List<Person>
Field1
Field2
Field3
行う必要があるのは、それぞれのDAOのみで、リストまたはオブジェクト自体を返します
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();
}
}
トンネルの終わりの光を見るのに役立つことを望みます;)
Telerikをチェックしてください。RadGridにはこの種のものがすぐに使用できます(NestedHierarchyとdetailtables)
http://demos.telerik.com/aspnet -ajax / Grid / Examples / Overview / DefaultCS.aspx
これに関する良い記事 ここ ASP.NET AJAXとAJAX Control Toolkitを使用して折りたたみ可能にします。
GridViewは非常に静的です。テーブルがより複雑になる場合はXSLTを使用するため、最終的に制御できます。それ以外の場合、MicrosoftはDataRepeaterなどの他のASP.NETコントロールを提供します。