我需要将组合框控件与可以在DataGridView列中检查的项一起使用。所以我从以下链接找到了一个控件 https://github.com/sgissinger/CheckBoxComboBox/
在这里,基本的CheckBoxComboBox在演示中运行良好,它扩展了DataGridViewCheckBoxComboBoxColumn类,可以在DataGridView中用于单个列。
现在,在设计时在DataGridView中添加此列,启用DataGrid以添加新行,当数据插入另一列并从该列中选择值时,ParseFormattedValue()将给出null异常。
使用代码添加新行时,GetFormattedValue()在其value参数中给出null异常。
在DataGridView中,我添加了两列,一列是简单的文本框列,另一列是DataGridViewCheckBoxComboBoxColumn,在其中添加工作日名称。
现在我尝试按
添加新行dataGridView1.Rows.Add();
它在GetFormattedValue()中显示异常,因为null来自它的value参数。
答案 0 :(得分:3)
在DataGridView中使用自定义CheckBoxComboBox控件已完成。首先,我根据您的要求添加了DataGridViewTextBoxColumn或任何其他,然后以下列方式在该DataGridView中添加自定义CheckBoxComboBox列。 首先,您需要创建要在该组合框中显示的项目列表
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"));
然后你需要创建DataGridViewCheckBoxComboBoxColumn
的对象DataGridViewCheckBoxComboBoxColumn comboboxColumn = new DataGridViewCheckBoxComboBoxColumn();
从该状态List对象创建ListSelectionWrapper的对象并设置其TextSeparator属性。
ListSelectionWrapper<Object> wrappedList = new ListSelectionWrapper<Object>(statuses);
wrappedList.TextSeparator = comboboxColumn.TextSeparator;
将comboboxColumn其他属性添加为
comboboxColumn.DataSource = wrappedList;
comboboxColumn.ValueMember = "Selected";
comboboxColumn.DisplayMemberSingleItem = "Name";
comboboxColumn.DisplayMember = "NameConcatenated";
然后在DataGridView中插入列
dgvKioskList.Columns.Add(comboboxColumn);
在此之后,您的列将插入DataGridView中。现在要插入一个预先选择了一些列表项的新行,您需要创建一个像
这样的Dictionary对象Dictionary<String, Object> objSelectedDays = new Dictionary<String, Object>();
如果你想从ComboBox中选择星期日和星期二,你可以编写
objSelectedDays.Add("Sunday", statuses[0]);
objSelectedDays.Add("Tuesday", statuses[2]);
在此之后,当您使用其他数据和此objSelectedDays对象向DataGridView中插入新行时,新行将添加到网格
datagridView1.Rows.Add("ID1", objSelectedDays);
其中&#34; ID1&#34;插入到简单的DataGridViewTextBoxColumn
中如果要从datagrid读取选定的值,则键入将单元格转换为Dictionary对象,如
var values = datagridView1.Rows[0].Cells[1].Value as Dictionary<String, Object>;
然后循环通过值对象数组从特定行中读取选中的值CheckBoxComboBox控件