2016-05-03 7 views
2

DataGridView列でチェックできる項目でコンボボックスコントロールを使用する必要があります。だから私は、デモでは正常に動作している。この基本CheckBoxComboBoxでは、以下のリンク https://github.com/sgissinger/CheckBoxComboBox/DataGridView列でカスタムCheckBoxComboBoxを使用する

から一つの制御を発見した、それは単一の列のためのDataGridViewで使用することができDataGridViewCheckBoxComboBoxColumnクラスを拡張しました。

DataGridViewでデザイン時にこの列を追加すると、データグリッドを有効にして新しい行を追加し、別の列にデータを挿入してこの列から値を選択すると、ParseFormattedValue()はNULL例外を与えます。

また、コードを使用して新しい行を追加する場合、GetFormattedValue()はその値パラメータにnull例外を指定しています。

DataGridViewでは2つの列が追加されています.1つは単純なテキストボックス列で、もう1つはDataGridViewCheckBoxComboBoxColumnで、その中に曜日の名前が追加されています。今

私はnullがそれのvalueパラメータに来ているよう

dataGridView1.Rows.Add(); 

GetFormattedValueでの上映例外()で新しい行を追加してみてください。

答えて

2

DataGridViewでのカスタムCheckBoxComboBoxコントロールの使用が完了しました。最初に、DataGridViewTextBoxColumnまたはその他の要件を追加して、そのDataGridViewでカスタムCheckBoxComboBox列を次のように追加します。 まずあなたがそのステータスListオブジェクトからListSelectionWrapperのオブジェクトを作成します。そして、あなたはDataGridViewCheckBoxComboBoxColumn

DataGridViewCheckBoxComboBoxColumn comboboxColumn = new DataGridViewCheckBoxComboBoxColumn(); 

のオブジェクトを作成する必要があり、そのコンボボックス

List<Status> statuses = new List<Status>(); 
statuses.Add(new Status(1, "Sunday")); 
statuses.Add(new Status(2, "Monday")); 
statuses.Add(new Status(3, "Tuesday")); 
statuses.Add(new Status(4, "Wednesday")); 
statuses.Add(new Status(5, "Thursday")); 
statuses.Add(new Status(6, "Friday")); 
statuses.Add(new Status(7, "Saturday")); 

に表示される項目のリストを作成する必要がありますTextSeparatorプロパティを設定します。

ListSelectionWrapper<Object> wrappedList = new ListSelectionWrapper<Object>(statuses); 
wrappedList.TextSeparator = comboboxColumn.TextSeparator; 

comboboxColumn.DataSource = wrappedList; 
comboboxColumn.ValueMember = "Selected"; 
comboboxColumn.DisplayMemberSingleItem = "Name"; 
comboboxColumn.DisplayMember = "NameConcatenated"; 

としてcomboboxColumn他のプロパティを追加し、これはあなたのコラムはあなたのDataGridViewに挿入された後のDataGridView

dgvKioskList.Columns.Add(comboboxColumn); 

に列を挿入します。今、事前に選択されたいくつかのリスト項目に新しい行を挿入するために、あなたは

Dictionary<String, Object> objSelectedDays = new Dictionary<String, Object>(); 

のような辞書オブジェクトを作成する必要があります。たとえばコンボボックスから日曜日と火曜日を選択したい場合は、

objSelectedDays.Add("Sunday", statuses[0]); 
objSelectedDays.Add("Tuesday", statuses[2]); 
を書くことができあなたは他のデータとこのobjSelectedDaysオブジェクトとDataGridViewのに新しい行を挿入すると、新しい行がグリッドに

datagridView1.Rows.Add("ID1", objSelectedDays); 

「ID1」私が追加されます。この後

シンプルDataGridViewTextBoxColumn

に挿入されたのあなたがデータグリッドから選択された値を読みたい場合は、その後、

var values = datagridView1.Rows[0].Cells[1].Value as Dictionary<String, Object>; 

のような辞書オブジェクトにセルをキャスト入力し、ループの値は、から選択された値を読み取るために、配列オブジェクトものの特定の行CheckBoxComboBoxコントロール

関連する問題