Преамбула
Я задаю этот вопрос, потому что, хотя я прочитал много ресурсов ListView, я все еще не «понимаю».
Задний план
У меня есть несколько Foo
, у которых есть список связанных с ними элементов (известный как Bar
), и я беру их из уровня доступа к данным / бизнес-логики в виде словаря, который содержит Foo
и его связанный Bars
. Я хотел бы разместить эти элементы на веб-странице в ListView
, который содержит Foo.Name
слева и List<Bar>
справа в раскрывающемся списке. (Показано с моим красивым изображением ASCII ниже):
Посмотреть список
------------------------------------------------------------------ | 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 | | | ----------------- -----------------
Итак, чтобы резюмировать, я хочу разместить Dictionary.Key «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>
Вопросы):
- Можно ли таким образом использовать Словарь?
- Любые указатели на то, где я ошибаюсь? (Ресурсы, подсказки и т. Д. Помогут)
- Есть лучший способ сделать это?
- Если этот вопрос ясен как грязь, прокомментируйте, чтобы я мог понять, как его улучшить.