Кажется, делать то, что вы хотите, но мой код просто быстрый тестовый код, так что будьте осторожны. Это действительно оказывалось как ожидалось все же.
Я задаю этот вопрос, потому что, хотя я прочитал много ресурсов 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>>
, Я пытаюсь получить значение ключа из словаря, которое будет отображаться в разделе «Имя элемента», и пытаюсь, чтобы строка «List <T>» отображалась в виде 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>
Вопросы):Можно ли использовать словарь таким образом?Любые указатели на то, где я иду не так? (Ресурсы, подсказки и т. Д. Помогут)Есть лучший способ сделать это?Если этот вопрос ясен как грязь, пожалуйста, прокомментируйте, чтобы я мог понять, как его улучшить.