Как можно связать хеш-таблицу с выпадающим списком - PullRequest
3 голосов
/ 18 ноября 2008

Как в vb.net / winforms можно связать хеш-таблицу с выпадающим списком или любым другим элементом управления на основе источника данных?

Ответы [ 6 ]

4 голосов
/ 18 ноября 2008

Просто используйте свойство Datasource раскрывающихся списков

   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();
2 голосов
/ 18 ноября 2008

Это winforms, wpf или asp.net? [обновление: ааа ... winforms ;-p]

winforms хочет, чтобы данные были IList (или, косвенно, через IListSource) - поэтому я предполагаю (из комментария), что вы используете winforms. Ни одна из встроенных коллекций, подобных словарю, не реализует IList, но, честно говоря, это не имеет значения: если вы привязываете данные, объем, вероятно, довольно мал, поэтому обычный список должен подойти.

Лучший вариант - это что-то вроде List<T> или BindingList<T>, где T имеет все свойства, с которыми вы хотите связать. Это вариант? Если вы застряли с 1.1 (поскольку вы упоминаете HashTable, а не Dictionary<,>), используйте ArrayList.

Пример (на 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}});
}
1 голос
/ 22 января 2010

Пример для данного объекта с именем 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";

Что здорово в этом, так это то, что вы можете затем вернуть данные из списка как исходный объект (не только поле значения, как в asp.net).

Order order = (Order)this.comboBox_Orders.SelectedValue;
0 голосов
/ 14 сентября 2010

Используйте .tolist. он также работает для возвращаемых сложных типов, которые вы получаете из представлений / хранимых процедур в платформе сущностей

0 голосов
/ 13 мая 2010

И, если вы используете словарь в качестве источника данных, вы можете использовать

MyDDL.Datasouce = myDict.ToList();

и он преобразует его в тип списка.

0 голосов
/ 18 ноября 2008
myCtrl.DataSource = myHashtable
myCtrl.DataBind()

Пример источника привязываемого элемента управления:

<itemtemplate>
    <%# DataBinder.Eval(Container.DataItem, "Key", "<td>{0}</td>") %>
    <%# DataBinder.Eval(Container.DataItem, "Value", "<td>${0:f2}</td>") %>
</itemtemplate>
...