gpt4 book ai didi

c# - 如何在 ListView 中显示类中的嵌套列表

转载 作者:行者123 更新时间:2023-11-30 17:05:55 26 4
gpt4 key购买 nike

我已经制作了两个类 - 仅针对此问题的示例:

public class Item
{
public int itemId { get; set; }
public string name { get; set; }

public Item() { }

public Item(int itemId, string name)
{
this.itemId = itemId;
this.name = name;
}
}

public class GroupOfitems
{
public string groupName { get; set; }
public List<Item> itemList;

public GroupOfitems()
{
itemList = new List<Item>();
}

public GroupOfitems(string groupName, List<Item> itemList)
{
this.groupName = groupName;
this.itemList = itemList;
}
}

public List<GroupOfitems> TestMethod()
{
// ADD SOME ITEMS TO FRUIT GROUP
List<Item> bla = new List<Item>();
bla.Add(new Item(1, "Banana"));
bla.Add(new Item(2, "Apple"));

// ADD SOME ITEMS TO VEGETABLES GROUP
List<Item> bla2 = new List<Item>();
bla2.Add(new Item(5, "Carot"));
bla2.Add(new Item(6, "Tomato"));

// ADD SOME ITEMS TO SOURCE
List<GroupOfitems> result = new List<GroupOfitems>();
result.Add(new GroupOfitems("Fruit", bla));
result.Add(new GroupOfitems("Vegetables", bla2));

// RETURN SOURCE
return result;
}

在我的 .aspx 文件中我有 ObjectDataSourceListView喜欢:

<asp:ObjectDataSource ID="odsRecipesIngredientListTest" runat="server"
SelectMethod="TestMethod" TypeName="MyRepository">
</asp:ObjectDataSource>

<asp:ListView ID="lvRecipeIngredients" runat="server"
DataSourceID="odsRecipesIngredientListTest"
ItemPlaceholderID="itemPlaceHolderId">
<LayoutTemplate>
<asp:PlaceHolder id="itemPlaceHolderId" runat="server" />
</LayoutTemplate>
<ItemTemplate>
<asp:Label ID="lblGroupName" Text='<%# Eval("groupName") %>' runat="server" /><br />

<asp:ListView ID="lvIngredientList" runat="server"
DataSource='<%# Eval("itemList") %>'
ItemPlaceholderID="itemPlaceHolderId">
<LayoutTemplate>
<asp:PlaceHolder id="itemPlaceHolderId" runat="server" />
</LayoutTemplate>
<ItemTemplate>
<asp:Label ID="Label4" Text='<%# Eval("itemId") %>' runat="server" />
<asp:Label ID="Label16" Text='<%# Eval("name") %>' runat="server" />
</ItemTemplate>
</asp:ListView>
</ItemTemplate>
</asp:ListView>

这是这个问题的一个非常简单的例子。一切正常,但我无法绑定(bind) itemListDataSource嵌套 ListView喜欢 ( DataSource='<%# Eval("itemList") %>' ) (因为 itemList 不是类中的属性)。这是绑定(bind)的正确方法还是我需要改变我的方法?

最佳答案

listItems 成员被定义为字段,而不是属性,防止使用GetProperties 找到它的反射。 (也就是数据绑定(bind)的实际作用)。

public class GroupOfitems
{
public string groupName { get; private set; }

public List<Item> ItemList { get; private set; }

public GroupOfitems()
{
this.ItemList = new List<Item>();
}

public GroupOfitems(string groupName, List<Item> itemList)
{
this.groupName = groupName;
this.ItemList = itemList;
}
}

事实上,您应该始终使用属性来公开您的数据接口(interface)。这就是 encapsulation 的意思.

关于c# - 如何在 ListView 中显示类中的嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com