フォームを勝つためのDataTableから列挙型をバインドする方法にCheckedListBox
質問
私はこのシナリオを持っています:
[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にデータテーブルの「色」の欄に選択した色のenumed値をバインドすることです。 それは可能ですか?
これまでのところ、私はグリッドのRowEnterイベントでプレーしてきたが、これはまったく本当に素晴らしい非常に脆くはないようです。
編集: 私はのMyTextと呼ばれるDataTableの4列目を持っている場合たとえば、私は、このようなテキストボックスにその列をバインドすることができます:
myTextBox.DataBindings.Add("Text", dt, "MyText");
データグリッドの行を通って移動するときに、テキストボックスの値はautomaticaly変更し、テキストボックスに任意の更新はバックデータテーブルに保存されています。 私もchecklistboxと列挙型からこのfunctionaltyを取得したいと思います。
解決
これは典型的なマスター・ディテール・シナリオではないとして、それを行うための簡単な方法はありません。私はあなたがやっぱそのコードを足す開始する必要がありますね。
他のヒント
私はあなたが後にしているかを正確にわからないんだけど、あなたは色が使用されているかを決定するために貪欲なアルゴリズムを使用することができますか?
たとえば、あなたは11を取得する唯一の可能な方法は、黄色持つことであるので、あなたは(8)に収まる最大の番号を削除し、対応するチェックボックスにチェックを入れ数11を持っています。そして、あなたは(青)2で収まる3.最大数を取得し、その後、残りは明らかである。
所属していません StackOverflow