3

在 vb.net / winforms 中,如何将哈希表绑定到下拉列表或任何其他数据源驱动的控件?

4

6 回答 6

4

只需使用下拉列表的 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();
于 2008-11-18T14:46:16.040 回答
2

这是winforms、wpf还是asp.net?[更新:啊……winforms ;-p]

winforms 希望 data 是IList(或间接地 via IListSource) - 所以我猜测(从评论中)你正在使用 winforms。内置的类字典集合都没有实现IList,但老实说,这并不重要:如果您是数据绑定,则体积可能相当小,因此常规列表应该没问题。

最好的选择是类似于List<T>or的东西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}});
}
于 2008-11-18T15:08:05.713 回答
1

名为 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;
于 2010-01-22T18:34:28.590 回答
0
myCtrl.DataSource = myHashtable
myCtrl.DataBind()

可绑定控件的示例源:

<itemtemplate>
    <%# DataBinder.Eval(Container.DataItem, "Key", "<td>{0}</td>") %>
    <%# DataBinder.Eval(Container.DataItem, "Value", "<td>${0:f2}</td>") %>
</itemtemplate>
于 2008-11-18T14:49:05.003 回答
0

而且,如果您碰巧使用 Dictionary 作为数据源,您可以使用

MyDDL.Datasouce = myDict.ToList();

它会将其转换为列表类型。

于 2010-05-13T15:56:20.643 回答
0

使用 .tolist。它也适用于您从实体框架中的视图/存储过程中获得的返回复杂类型

于 2010-09-14T11:58:57.353 回答