إنشاء القائمة المنسدلة خيارات من التعداد في DataGridView
-
09-06-2019 - |
سؤال
لدي حاليا فئة أحاول إنشاء واجهة المستخدم الرسومية سهلة لإنشاء مجموعة من هذه الفئة.معظم سمات هذه الطبقة هي سلاسل.ومع ذلك, واحدة من سمات أريد المستخدم أن يكون قادرا على تحديد هو التعداد.ولذلك أود واجهة المستخدم ، 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)
{
}
هذا عملت بالنسبة لي