好的,让我们想象一下我有一个这样的对象:
public class User {
public int ID { get; set; }
public String Name { get; set; }
public String Surname { get; set; }
public String Description { get; set; }
public Location Location { get; set; }
}
请注意,最后一个属性是一个 Location 类型的对象。让我们看看 Location 对象:
public class Location {
public String ID { get; set; }
public String Address { get; set; }
public String PostCode { get; set; }
}
现在 我想在 gridview 中显示一个用户列表,但不是用数据读取器或任何数据对象提供它,我想使用用户集合列表,所以我调用了一个方法,该方法为我提供了一个列表集合和数据绑定(bind)像这样的网格 View :
gvUsers.DataSource = getUsers(); // This returns a List<User> collection.
gvUsers.DataBind();
现在,我使用了一些 BoundFields 和 Templatefields 来显示数据并且它可以正常工作,如下所示:
<asp:GridView ID="gvUsers" runat="server" AutoGenerateColumns="False" >
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:TemplateField HeaderText="Surname">
<ItemTemplate>
<asp:Label ID="lbSurname" runat="server" Text='<%# Eval("Surname") %>'></asp:Label>
<asp:HiddenField ID="hdnUserId" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "ID") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
如果我尝试访问 Location 对象属性,问题就来了,在模板字段中想象一下:
<asp:HiddenField ID="hdnLocationName" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "Location.PostCode") %>' />
这不起作用。
我不知道是否有办法使用模板字段来显示它。我也想知道是否有办法使用 BoundField 来做到这一点。
如果仅使用 FrontEnd 无法完成,是否可以在 gridView 数据绑定(bind)中的 Backend 中以某种方式完成?我应该使用 LINQ 并将其设置在选择上吗?
最佳答案
Law of Demter 适用。简而言之,如果您想像那样绑定(bind)到它,您必须使 Postcode 成为用户的属性。
This page 给出了迪米特定律的一个很好的例子。
关于c# - 在C#中从对象列表进行数据绑定(bind)时如何显示子对象属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10212955/