Frage

In vb.net / WinForms, wie kann eine Hash-Tabelle zu einer Dropdown-Liste oder einer anderen Datenquelle getriebene Steuerung gebunden werden?

War es hilfreich?

Lösung

Ist das WinForms, WPF oder asp.net? [Update: ahh ... WinForms ;-p]

winforms will Daten zu IList (oder indirekt über IListSource) - so vermute ich (aus dem Kommentar), die Sie WinForms verwenden. Keine der eingebauten Wörterbuch-Sammlungen wie IList implementieren, aber um ehrlich zu sein ist es egal. Wenn Sie Datenbindung sind, das Volumen ist wahrscheinlich ziemlich klein, so dass eine regelmäßige Liste sollte in Ordnung sein

Die beste Möglichkeit ist so etwas wie ein List<T> oder BindingList<T>, wo T die Eigenschaften alles, was Sie binden möchten hat. Ist das eine Option? Wenn Sie mit 1.1 stecken geblieben sind (da Sie HashTable statt Dictionary<,> schweigen), dann ArrayList verwenden.

Beispiel (in C #):

class MyData
{
    public int Key { get; set; }
    public string Text { get; set; }
}
[STAThread]
static void Main()
{
    var data = new List<MyData>
    {
        new MyData { Key = 1, Text = "abc"},
        new MyData { Key = 2, Text = "def"},
        new MyData { Key = 3, Text = "ghi"},
    };
    ComboBox cbo = new ComboBox
    {
            DataSource = data,
            DisplayMember = "Text",
            ValueMember = "Key"
    };
    cbo.SelectedValueChanged += delegate {
        Debug.WriteLine(cbo.SelectedValue);
    };
    Application.Run(new Form {Controls = {cbo}});
}

Andere Tipps

Verwenden Sie einfach die Datasource-Eigenschaft der Drop-Down-Listen

   DropDownList dd = new DropDownList();
   Hashtable mycountries = New Hashtable();
   mycountries.Add("N","Norway");
   mycountries.Add("S","Sweden");
   mycountries.Add("F","France");
   mycountries.Add("I","Italy");
   dd.DataSource=mycountries;
   dd.DataValueField="Key";
   dd.DataTextField="Value";
   dd.DataBind();

Beispiel für ein bestimmtes Objekt namens Order:

List<Order> list = new List<Order>{};

foreach (Order o in OOS.AppVars.FinalizedOrders.Values)
{
  list.Add(o);
}

this.comboBox_Orders.DataSource = list;
this.comboBox_Orders.DisplayMember = "Description";

Was ist das cool ist, dass man dann die Daten wieder aus der Liste wie das ursprüngliche Objekt (nicht nur das Wertefeld wie in asp.net) erhalten können.

Order order = (Order)this.comboBox_Orders.SelectedValue;

Mit .ToList. es funktioniert auch für zurückgegebene komplexe Typen, die Sie von Ansichten / Stored Procedures in Entity Framework erhalten

Und wenn Sie Wörterbuch als Datenquelle passieren verwenden, können Sie

MyDDL.Datasouce = myDict.ToList();

, und es wird sie in eine Liste Typ umwandeln.

myCtrl.DataSource = myHashtable
myCtrl.DataBind()

Beispiel Quelle der bindungsfähigen Steuerung:

<itemtemplate>
    <%# DataBinder.Eval(Container.DataItem, "Key", "<td>{0}</td>") %>
    <%# DataBinder.Eval(Container.DataItem, "Value", "<td>${0:f2}</td>") %>
</itemtemplate>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top