Преамбула
Я задаю этот вопрос, потому что, хотя я читал много ресурсов ListView, я все еще не "получаю" его.
Фон
У меня есть группа Foo
, у которой есть список связанных с ними элементов (известный как Bar
), и я вытаскиваю их из слоя Data Access/Business Logic в качестве словаря, который содержит 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>>
. Я пытаюсь получить значение ключа из словаря, чтобы оно отображалось в разделе "Имя элемента", и я пытаюсь получить "Список <T> Bar", чтобы отобразиться как DropDownList в правой части ListView.
Диаграммы классов
----------------- ----------------- | Foo | | Bar | ----------------- ----------------- | Id | | ItemName | | Name | | ItemValue | | BarID | | | ----------------- -----------------
Итак, чтобы повторить, я хочу поместить словаря. Name "Name" в левую часть 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>
Вопрос (ы):
- Можно ли использовать словарь таким образом?
- Любые указатели на то, где я ошибаюсь? (Ресурсы, подсказки и т.д. Помогут)
- Есть ли лучший способ сделать это?
- Если этот вопрос ясен как грязь, прокомментируйте, чтобы я мог понять, как его улучшить.