好的,让我们想象一下我有一个这样的对象:

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/

10-17 02:18