我有这种情况:
[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和枚举中获得这个功能。
答案 0 :(得分:1)
没有简单的方法可以做到这一点,因为这不是典型的主要细节方案。我想你应该开始写这个代码了。
答案 1 :(得分:-1)
我不确定你追求的是什么,但是你可以使用贪心算法来确定使用哪种颜色吗?
例如,你有11号。获得11的唯一可能方法是黄色,所以你删除最大的数字(8),并选中相应的复选框。然后你得到3.适合的最大数字是2(蓝色),然后其余的是显而易见的。