问题描述
我有一个员工列表,其中每个列表项还包含他们访问不同部门的时间(地点)列表。
我想在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();
}
}