如何从DataTable绑定Enum以获取表单CheckedListBox

时间:2009-06-01 09:52:12

标签: c# .net winforms

我有这种情况:

[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);

我想要的是以某种方式将数据表的“颜色”列中所选颜色的输入值以一种很好的方式绑定到CheckedListBox。 有可能吗?

到目前为止,我一直在玩网格的RowEnter事件,但这看起来非常脆弱,而且根本不是很好。

编辑: 例如,如果我在数据表中有一个名为MyText的第4列,我可以将该列绑定到这样的文本框:

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

当移动数据网格中的行时,文本框中的值会自动更改,文本框的任何更新都会保存回数据表。 我想从checklistbox和枚举中获得这个功能。

2 个答案:

答案 0 :(得分:1)

没有简单的方法可以做到这一点,因为这不是典型的主要细节方案。我想你应该开始写这个代码了。

答案 1 :(得分:-1)

我不确定你追求的是什么,但是你可以使用贪心算法来确定使用哪种颜色吗?

例如,你有11号。获得11的唯一可能方法是黄色,所以你删除最大的数字(8),并选中相应的复选框。然后你得到3.适合的最大数字是2(蓝色),然后其余的是显而易见的。