إنشاء القائمة المنسدلة خيارات من التعداد في DataGridView

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

سؤال

لدي حاليا فئة أحاول إنشاء واجهة المستخدم الرسومية سهلة لإنشاء مجموعة من هذه الفئة.معظم سمات هذه الطبقة هي سلاسل.ومع ذلك, واحدة من سمات أريد المستخدم أن يكون قادرا على تحديد هو التعداد.ولذلك أود واجهة المستخدم ، dropdownlist لهذا التعداد ، إلى تقييد المستخدم من إدخال قيمة غير صالحة.حاليا, أنا أخذ القائمة الأولية من الكائنات ، إضافة إلى DataTable ووضع البيانات من DataGridView الى طاولة المفاوضات.يعمل بشكل جيد حتى يخلق خانة الاختيار عمود واحد منطقية الملكية.ولكن أنا لا أعرف كيف لجعل العمود التعداد في dropdownlist.أنا باستخدام C#.NET 2.0.

أيضا, لقد حاولت تحديد مصدر البيانات من DataGridView إلى قائمة من الأشياء ، ولكن عندما أفعل هذا ، فإنه لا يساعد مع enum و أنا غير قادر على إنشاء صفوف جديدة في DataGridView, ولكن أنا بالتأكيد لا بد أن استخدام DataTable كما DataSource ، كان مجرد خيار لدي شبه العامل.

هل كانت مفيدة؟

المحلول

أنا لا أعرف إذا كان هذا سوف تعمل مع DataGridView عمود لكنه يعمل مع ComboBoxes:

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));

و:

MyEnum value = (MyEnum)comboBox1.SelectedValue;

تحديث:يعمل مع DataGridView الأعمدة جدا, فقط تذكر أن تعيين نوع القيمة.

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.Name = "My Enum Column";
col.DataSource = Enum.GetValues(typeof(MyEnum));
col.ValueType = typeof(MyEnum);
dataGridView1.Columns.Add(col);

نصائح أخرى

أو إذا كنت بحاجة إلى القيام ببعض تصفية العداد القيم, يمكنك من خلال حلقة Enum.GetValues(typeof(EnumeratorName)) و إضافة تلك التي تريد باستخدام:

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

بوصفها جانبا بدلا من استخدام DataTable يمكنك تعيين الخاصية DataSource من DataGridView إلى BindingSource كائن ، DataSource من BindingSource مجموعة كائن إلى BindingList<Your Class>, التي تقوم بتأهيل طريق تمرير IList إلى المنشئ.

في الحقيقة أود أن تكون مهتمة لمعرفة من أي شخص إذا كان هذا هو الأفضل باستخدام DataTable في الحالات التي لم يكن لديك بالفعل واحدة (أيفإنه يتم إرجاعها من بيانات الإتصال).

    if(e.KeyCode == Keys.Oem3)
    {

    }

هذا عملت بالنسبة لي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top