Преамбула
Я задаю этот вопрос, потому что, хотя я прочитал много ресурсов ListView, я все еще не «получаю» его.
Фон
У меня есть куча Foo
, которые имеют список элементов, связанных с ними (, известный как Bar
), и я извлекаю их из слоя доступа к данным / бизнес-логики словарь, который содержит Foo
и связанный с ним Bars
. Я хотел бы выложить эти элементы на веб-странице в ListView
, который содержит Foo.Name
слева и List<Bar>
справа в выпадающем списке. (Показано с моим прекрасным искусством ASCII ниже):
ListView
------------------------------------------------------------------
| Name Of Item | DropDownList (of List<T>) |
|---------------------------------| _____________________ |
| foo1 | | bar1 | v | |
| | |_______________|___| |
------------------------------------------------------------------
| | DropDownList (of List<T>) |
| | _____________________ |
| foo2 | | bar2 | v | |
| | |_______________|___| |
------------------------------------------------------------------
Хорошо, вот что происходит. Это ListView; Элементы извлекаются из базы данных в Dictionary<Foo, List<Bar>>
. Я пытаюсь получить значение ключа из словаря для отображения в разделе «Имя элемента», и пытаюсь заставить «List Bar» отображаться в виде DropDownList на правой стороне ListView.
Диаграммы классов
----------------- -----------------
| Foo | | Bar |
----------------- -----------------
| Id | | ItemName |
| Name | | ItemValue |
| BarID | | |
----------------- -----------------
Итак, подведем итоги. Я хочу поместить словарь Dictionary.Key «Имя» в левую часть ListView, а Dictionary.Value (который является списком) в DropdownList с правой стороны.
Так, чтобы для каждой пары ключ / значение существовали имя и раскрывающийся список, в котором будет храниться значение каждого ключа.
Но у меня проблемы (очевидно), и я надеюсь, что кто-то может сказать мне, что я делаю неправильно.
Код сзади:
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>
Вопрос (ы):
- Можно ли использовать словарь таким образом?
- Есть какие-нибудь указатели на то, где я иду не так? (Ресурсы, подсказки и т. Д. Помогут)
- Есть ли лучший способ сделать это?
- Если этот вопрос ясен как грязь, пожалуйста, прокомментируйте, чтобы я мог выяснить, как его улучшить.