3

好的,假设我有一个这样的对象:

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 中显示一个用户列表,但我不想使用 datareader 或任何数据对象来提供它,而是想使用 List of Users Collection,所以我调用了一个方法,它给了我一个 List 集合和数据绑定 gridview像这样:

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 数据绑定的 Backend 中以某种方式完成?我应该使用 LINQ 并将其设置在 select 上吗?

4

3 回答 3

1

德姆特法则适用。简而言之,如果你想像这样绑定到它,你必须使 Postcode 成为用户的属性。

这个页面给出了得墨忒耳法则的一个很好的例子。

于 2012-04-18T15:42:05.260 回答
1

您可以做的最好的 AFAIK 是添加一个仅将值拉出的属性Location。像这样的东西:

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; }
    public String LocationPost {get{return Location.Post;}}
}
于 2012-04-18T15:51:48.480 回答
0

更清洁的解决方案是在位置覆盖 ToString 方法来表示描述。

于 2015-05-12T08:18:25.967 回答