我们在项目的某些页面中使用了 GridView 控件,我们不想大幅更改,是否可以在 gridview 中创建层次结构?这可以通过在 Gridview 中使用 GridView 来获取父子关系来实现吗?
Anthraxer
问问题
9283 次
5 回答
5
是的,你可以,而且很容易......
最好的方法是拥有一些 ObjectDataSource,以便整个过程对您来说更容易,或者当然,您可以在 paraent gridview OnRowDataBound 事件中绑定嵌套的 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();
}
}
希望它有助于看到隧道尽头的曙光;)
于 2009-01-16T10:42:59.647 回答
0
是的,您可以将 GridView 相互嵌套。请参阅以下文章。
于 2009-01-16T08:29:14.253 回答
0
看看 Telerik,他们的 RadGrid 有这种开箱即用的东西(NestedHierarchy 和 detailtables)
http://demos.telerik.com/aspnet-ajax/Grid/Examples/Overview/DefaultCS.aspx
于 2009-01-16T10:19:05.637 回答
0
这里有很好的文章, 它使用 ASP.NET AJAX 和 AJAX 控件工具包使其可折叠。
于 2009-01-16T21:37:00.633 回答
-1
GridView 是相当静态的。如果表将变得更复杂,我们会使用 XSLT,因此我们可以最终控制它。否则,Microsoft 会提供其他 ASP.NET 控件,例如 DataRepeater。
于 2009-01-16T08:30:08.713 回答