ハッシュテーブルをドロップダウンリストにバインドするにはどうすればよいですか?
-
08-07-2019 - |
質問
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>
所属していません StackOverflow