在DataGridView列

时间:2016-05-03 05:08:46

标签: c# datagridview custom-controls

我需要将组合框控件与可以在DataGridView列中检查的项一起使用。所以我从以下链接找到了一个控件 https://github.com/sgissinger/CheckBoxComboBox/

在这里,基本的CheckBoxComboBox在演示中运行良好,它扩展了DataGridViewCheckBoxComboBoxColumn类,可以在DataGridView中用于单个列。

现在,在设计时在DataGridView中添加此列,启用DataGrid以添加新行,当数据插入另一列并从该列中选择值时,ParseFormattedValue()将给出null异常。

使用代码添加新行时,GetFormattedValue()在其value参数中给出null异常。

在DataGridView中,我添加了两列,一列是简单的文本框列,另一列是DataGridViewCheckBoxComboBoxColumn,在其中添加工作日名称。

现在我尝试按

添加新行
dataGridView1.Rows.Add();

它在GetFormattedValue()中显示异常,因为null来自它的value参数。

1 个答案:

答案 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控件