كيف يمكن أن تكون ملزمة وجدول هاش إلى القائمة المنسدلة؟

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

سؤال

في 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top