【发布时间】:2010-10-09 16:20:22
【问题描述】:
序言
我问这个问题是因为即使我已经阅读了很多 ListView 资源,但我仍然没有“理解”它。
背景
我有一堆 Foo 有一个与之关联的项目列表(称为 Bar),我正在从数据访问/业务逻辑中提取它们图层作为字典,包含Foo 及其关联的Bars。我想在网页上将这些项目吐出到一个ListView 中,该Foo.Name 在左侧,List<Bar> 在右侧的下拉列表中。 (下面是我漂亮的 ASCII 艺术作品):
列表视图
-------------------------------------------------- ---------------- |物品名称 | DropDownList (List好的,这就是正在发生的事情。这是一个列表视图;这些项目从数据库中提取到 回顾一下,我想将 Dictionary.Key “Name” 放入 ListView 的左侧,并将 Dictionary.Value(恰好是一个列表)放入右侧的 DropdownList 中。 因此,对于每个键/值对,都会有一个名称和一个下拉列表,其中包含每个键的值。 但我遇到了问题(显然),希望有人能告诉我我做错了什么。Dictionary<Foo, List<Bar>>。我试图从字典中获取键值以显示在“项目名称”下,并试图让“List类图
----------------- -----------------
|福 | |酒吧 |
----------------- -----------------
|身份证 | |物品名称 |
|姓名 | |项目价值 |
|条码 | | |
----------------- -----------------
代码隐藏:
protected Dictionary<Foo, List<Bar>> FooDictionary
{
get;
set;
}
protected void DataBindFooList(List<int> SelectedFoos)
{
System.Web.UI.WebControls.ListView lv = lvFooList;
try
{
Dictionary<Foo, List<Bar>> fooDictionary =
new Dictionary<Foo, List<Bar>>();
foreach (int Foo in SelectedFoos)
{
// Build List of Foos to add as Dictionary.Keys
fooDictionary.Add(fooScalar, Bar)
}
FooDictionary = fooDictionary;
lv.DataSource = FooDictionary;
lv.DataBind();
ddlListOfBars.DataSource = FooDictionary;
ddlListOfBars.DataValueField = "ItemValue";
ddlListOfBars.DataTextField = "ItemName";
ddlListOfBars.DataBind();
}
catch (Exception ex)
{
SetMessage(divFooMsg, "Unable to retrieve Foos: " +
ex.Message, true, true);
}
ListView 代码:
<asp:ListView ID="lvFooList" runat="server">
<LayoutTemplate>
<asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
</LayoutTemplate>
<ItemSeparatorTemplate>
<hr />
</ItemSeparatorTemplate>
<ItemTemplate>
<%#Eval("Name") %>
<asp:DropDownList ID="ddlListOfBars" runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:ListView>
问题:
【问题讨论】:
-
+1 写得很好的问题。我几乎找不到任何可以破解和削减的东西!
-
FooDictionary 是从哪里来的,为什么要赋值 FooDictionary = fooDictionary;和 lv.DataSource = FooDictionary;?
-
Manu:在那个 foreach 语句中有很多巫术。本质上,它通过 Foo 和与该 foo 关联的 Bars 创建一个字典。我只是为了方便而展示了最终产品。数据源不应该是 FooDictionary 以便获得名称吗?
标签: c# .net asp.net data-binding listview