كيفية ربط ENUM من DataTable للفوز بالنماذج CheckedBox

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

  •  06-09-2019
  •  | 
  •  

سؤال

لدي هذا السيناريو:

[Flags]
enum Colors : long
(
    red = 1,
    blue = 2,
    green = 4,
    yellow = 8,
)

DataTable dt = new DataTable();
dt.Columns.Add("PersonName", typeof(string));
dt.Columns.Add("CheckOption", typeof(bool));
dt.Columns.Add("Colors", typeof(long));

// note that the values in the Colors column are enumed values of chosen colors
dt.Rows.Add("Name 1", true, 1); // red
dt.Rows.Add("Name 2", true, 12);    // green and yellow
dt.Rows.Add("Name 3", true, 4); // green
dt.Rows.Add("Name 4", false, 11);   // red, blue and yellow

// bind the datatable to grid
DataGridView dgv = new DataGridView();
dgv.DataSource = dt;
// hide the colors in the grid 
dgv.Columns["Colors"].Visible = false;

// checked list box has all items from the enum
CheckedListBox clb = new CheckedListBox();
string[] colorsArray = Enum.GetNames(typeof(Colors));
clb.Items.AddRange(colorsArray);

ما أود أن يرتبط بطريقة أو بأخرى القيمة المتساء للألوان المختارة في عمود "الألوان" في DataTable إلى صندوق الاختبار الاختباري بطريقة لطيفة. هل هو ممكن؟

حتى الآن كنت ألعب مع حدث الشبكة Rowenter ولكن هذا يبدو هشا للغاية وليس لطيفا حقا على الإطلاق.

تحرير: على سبيل المثال إذا كان لدي عمود 4 في DataTable يسمى MyText يمكنني ربط هذا العمود مربع نص مثل هذا:

myTextBox.DataBindings.Add("Text", dt, "MyText");

عند التحرك عبر الصفوف في DataGrid القيمة في تغييرات Automaticaly TextBox وأي تحديثات إلى مربع النص يتم حفظها مرة أخرى إلى DataTable. أرغب في الحصول على هذا الوظيفية من صندوق الاختيار ويعمل أيضا.

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

المحلول

لا توجد طريقة سهلة للقيام بذلك لأن هذا ليس سيناريو تفاصيل رئيسي نموذجي. أعتقد أنك يجب أن تبدأ في الحصول على رمز الشفرة.

نصائح أخرى

أنا لست متأكدا تماما ما كنت فيه، ولكن يمكنك استخدام خوارزمية جشعة لتحديد الألوان التي يتم استخدام الألوان؟

على سبيل المثال، لديك الرقم 11. الطريقة الممكنة الوحيدة للحصول على 11 هي وجود صفراء، لذلك يمكنك إزالة أكبر عدد يناسب (8)، وتحقق من مربع الاختيار المقابل. ثم تحصل على 3. أكبر رقم يناسب هو 2 (أزرق)، ثم الباقي واضح.

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