Кажется, делать то, что вы хотите, но мой код просто быстрый тестовый код, так что будьте осторожны. Это действительно оказывалось как ожидалось все же.

була

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

Ответы на вопрос(2)

Ваш ответ на вопрос