2009-06-01 13 views
1

私はこのシナリオを持っている:私が欲しいものをに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イベントで遊んでいましたが、これは非常に脆弱で、全く素敵ではないようです。

EDIT:例えば 私はのMyTextと呼ばれるDataTableの4列目を持っていた場合、私は、このようなテキストボックスにその列をバインドすることができます:データグリッド内の行を介して値を移動するときに

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

テキストボックスの自動化が変更され、テキストボックスへの更新はすべてデータテーブルに保存されます。 私はchecklistboxとenumsからこの機能を取得したいと思います。

答えて

1

これは一般的なマスター詳細シナリオではないため、簡単な方法はありません。私は後でそのコードを書いてみるべきだと思います。

-1

私はあなたが何をしているのかはっきりしていませんが、欲張りのアルゴリズムを使ってどの色が使用されているかを判断できますか?

たとえば、番号11があります。11を取得する唯一の方法は黄色で表示されるので、一致する最大の数字を削除して(8)、対応するチェックボックスをオンにします。次に、あなたは3になります。適合する最も大きい数字は2(青)で、残りは明らかです。

+0

私はどの色が選択されているかを知ることに問題はありません。私が欲しいのは、チェックされたリストボックスにそれらの値をバインドするので、データグリッドの行が選択されるたびにこの計算を行う必要はありません。 –

+0

申し訳ありませんが、私はそれを行う方法を知らないでしょう。しかし、これらの値をバインドしようとしても、行が選択されるたびに再計算されます。それはちょっと抽象化されています。 –

+0

ええ、私はする必要がありますね...私は簡単な方法を探していた:) –

関連する問題