如何解决来自asp.net中嵌套列表的嵌套GridView
我有一个员工列表,其中每个列表项还包含他们访问不同部门的时间(地点)列表。
我想在GridView(ID:GridView1)中显示数据,该数据包含ID和Name的BoundField列以及嵌套GridView(ID:GridView2)的TemplateField列,该列将显示部门列表,班次和时间。
public class PunchInfo
{
public string DepartmentName { get; set; }
public int Shift { get; set; }
public DateTime Time { get; set; }
}
public class Employees
{
public string Id { get; set; }
public string Name { get; set; }
public List<PunchInfo> Punches { get; set; }
}
我想在.cs文件中执行此操作,但是我不知道如何将数据绑定到网格。
/* EmployeeList is List<Employees> */
GridView1.DataSource = EmployeeList;
GridView gv2 = GridView1.FindControl("GridView2") as GridView;
/* How to bind the EmployeeList[row_idx].Punches to the nested GridView2 object? */
GridView1.DataBind();
谢谢
解决方法
您不需要FindControl
GridView2,只需在DataSource
中添加.aspx
元素
我的可行示例:
.aspx
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="Id">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Puches">
<ItemTemplate>
<asp:GridView ID="DetailGridView" runat="server" AutoGenerateColumns="False" DataSource='<%# Eval("Punches") %>'>
<Columns>
<asp:TemplateField HeaderText="Department Name">
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Eval("DepartmentName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Shift">
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Eval("Shift") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Time">
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Eval("Time") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
.aspx.cs
protected void Page_Load(object sender,EventArgs e)
{
if (!IsPostBack)
{
var employees = new List<Employees>
{
new Employees()
{
Id = "1",Name = "E1",Punches = new List<PunchInfo>()
{
new PunchInfo()
{
DepartmentName = "D1",Shift = 1,Time = DateTime.Now
},new PunchInfo()
{
DepartmentName = "D2",Shift = 2,}
},new Employees()
{
Id = "2",Name = "E2",Punches = new List<PunchInfo>()
{
new PunchInfo()
{
DepartmentName = "D3",Shift = 3,new PunchInfo()
{
DepartmentName = "D4",Shift = 4,}
}
};
GridView2.DataSource = employees;
GridView2.DataBind();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。