Dictionnaire<T> Liste<T>, et ListViews dans ASP.NET

Préambule

Je vous pose cette question parce que même si j'ai lu beaucoup de ListView ressources, je ne suis pas encore 'arriver' il.

Arrière-plan

J'ai un tas de Foo's qui ont une liste des articles associés (connu comme Bar), et je suis en tirant de l'Accès aux Données/de la couche Logique Métier comme Dictionnaire qui contient un Foo et ses associés Bars. Je voudrais à cracher sur ces articles sur la Page web dans un ListView qui détient le Foo.Name sur la gauche, et le List<Bar> sur la droite dans un dropdownlist. (Illustré avec ma belle ASCII art ci-dessous):

ListView

------------------------------------------------------------------ 
| Nom De l'objet | DropDownList (de la Liste<T>) | 
|---------------------------------| _____________________ | 
| toto1 | | bar1 | v | | 
| | |_______________|___| | 
------------------------------------------------------------------ 
| | DropDownList (de la Liste<T>) | 
| | _____________________ | 
| foo2 | | bar2 | v | | 
| | |_______________|___| | 
------------------------------------------------------------------ 

Bien, voici ce qu'il se passe. C'est une liste, Les éléments sont tirés à partir d'une base de données dans un Dictionary<Foo, List<Bar>>. Je vais essayer d'obtenir la Valeur de la Clé du dictionnaire sous le Nom de l'Article", et essaie d'obtenir la Liste des<T>, le " Bar à apparaître comme un DropDownList sur le côté droit de la liste.

Les Diagrammes De Classe

----------------- ----------------- 
| Foo | Bar | | 
----------------- ----------------- 
| | Id | Nom De L'Élément | 
| Nom | | ItemValue | 
| BarID | | | 
----------------- ----------------- 

Donc, pour résumer, je veux placer le Dictionnaire.La clé "Nom" dans le côté gauche de la liste, et le Dictionnaire.Valeur (qui se trouve être une liste) dans un DropdownList sur le côté droit.

De sorte que, pour chaque paire Clé/Valeur, il y en avait un Nom et une liste déroulante qui seraient maison chaque Valeur de Clé.

Mais je suis en cours d'exécution dans les problèmes (évidemment), et je suis en espérant que quelqu'un peut me dire ce que je fais mal.

Code Derrière:

  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);
            }

La Liste De Code:

<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>

La Question(s):

  1. Est-il possible d'utiliser un Dictionnaire de cette façon?
  2. Pointeur sur l'endroit où je vais mal? (Des ressources, des conseils, etc. aiderait)
  3. Est-il une meilleure façon de le faire?
  4. Si cette question est clair comme de la boue, s'il vous plaît commentaire afin que je puisse comprendre comment l'améliorer.
  • +1 pour la question écrite. Je pouvais à peine de trouver quelque chose de hack and slash!
  • D'où vient FooDictionary viennent et pourquoi attribuez-vous FooDictionary = fooDictionary; et lv.DataSource = FooDictionary;?
  • Manu: Il y a beaucoup de vaudou qui instruction foreach. Essentiellement, il passe à travers et crée un dictionnaire à partir de la Foo et les mesures associées avec qui foo. J'ai juste montré le produit final pour la facilité. Ne devrait pas être la source de données la FooDictionary sorte qu'il peut obtenir le nom?