ハッシュテーブルをドロップダウンリストにバインドするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/298926

質問

vb.net / winformsでは、ハッシュテーブルをドロップダウンリストまたは他のデータソース駆動型コントロールにどのようにバインドできますか?

役に立ちましたか?

解決

これはwinforms、wpf、またはasp.netですか? [更新:ああ... winforms ;-p]

winformsはデータをIList(または間接的にIListSource経由)にしたいので、(コメントから)winformsを使用していると推測しています。組み込みの辞書のようなコレクションはいずれもList<T>を実装していませんが、正直なところ問題ではありません。データバインディングの場合、ボリュームはおそらくかなり小さいため、通常のリストで十分です。

最良のオプションは、BindingList<T>またはTのようなものです。HashTableには、バインドするすべてのプロパティがあります。これはオプションですか? 1.1に固執している場合(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}});
}

他のヒント

ドロップダウンリストの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();

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;

.tolistを使用します。また、エンティティフレームワークのビュー/ストアドプロシージャから取得した返された複合型に対しても機能します

また、データソースとして辞書を使用する場合、

を使用できます
MyDDL.Datasouce = myDict.ToList();

そして、それをリスト型に変換します。

myCtrl.DataSource = myHashtable
myCtrl.DataBind()

バインド可能コントロールのソースの例:

<itemtemplate>
    <%# DataBinder.Eval(Container.DataItem, "Key", "<td>{0}</td>") %>
    <%# DataBinder.Eval(Container.DataItem, "Value", "<td>${0:f2}</td>") %>
</itemtemplate>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top