كيف يمكن أن تكون ملزمة وجدول هاش إلى القائمة المنسدلة؟
-
08-07-2019 - |
سؤال
في vb.net / WinForms عناصر، وكيف يمكن أن تكون ملزمة وجدول هاش إلى القائمة المنسدلة أو أي عنصر تحكم آخر يحركها مصدر البيانات؟
المحلول
هل هذا WinForms عناصر، برنامج الأغذية العالمي، أو 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}});
}
نصائح أخرى
ومجرد استخدام خاصية مصدر بيانات القوائم المنسدلة ل
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();
مثال لكائن معين يسمى ترتيب:
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>