在 DataGridView 列中使用自定义 CheckBoxComboBox
Using custom CheckBoxComboBox in DataGridView column
我需要将组合框控件与可在 DataGridView 列中选中的项目一起使用。所以我从以下 link 中找到了一个控件
https://github.com/sgissinger/CheckBoxComboBox/
其中基本的 CheckBoxComboBox 在演示中运行良好,它扩展了 DataGridViewCheckBoxComboBoxColumn class,可在 DataGridView 中用于单列。
现在在设计时将此列添加到 DataGridView 中,并启用 DataGrid 以添加新行,当将数据插入另一列并从此列中选择值时,ParseFormattedValue() 给出空异常。
另外,当使用代码添加新行时,GetFormattedValue() 会在它的值参数中给出 null 异常。
我在 DataGridView 中添加了两列,一列是简单的文本框列,另一列是 DataGridViewCheckBoxComboBoxColumn,在其中添加了星期名称。
现在,当我尝试通过
添加新行时
dataGridView1.Rows.Add();
它在 GetFormattedValue() 中显示异常,因为它的值参数中出现空值。
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();
从该状态列表对象创建一个 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 中。现在要插入一个带有预先 select 的一些列表项的新行,您需要创建一个 Dictionary 对象,例如
Dictionary<String, Object> objSelectedDays = new Dictionary<String, Object>();
例如,如果您想从 ComboBox select 星期日和星期二,您可以写
objSelectedDays.Add("Sunday", statuses[0]);
objSelectedDays.Add("Tuesday", statuses[2]);
在此之后,当您将新行与其他数据和此 objSelectedDays 对象一起插入到 DataGridView 中时,新行将添加到网格中
datagridView1.Rows.Add("ID1", objSelectedDays);
其中 "ID1" 被插入到简单的 DataGridViewTextBoxColumn
如果您想从数据网格中读取 selected 值,然后键入将单元格转换为字典对象,例如
var values = datagridView1.Rows[0].Cells[1].Value as Dictionary<String, Object>;
然后遍历值对象数组以从特定行 CheckBoxComboBox 控件中读取 selected 值
我需要将组合框控件与可在 DataGridView 列中选中的项目一起使用。所以我从以下 link 中找到了一个控件 https://github.com/sgissinger/CheckBoxComboBox/
其中基本的 CheckBoxComboBox 在演示中运行良好,它扩展了 DataGridViewCheckBoxComboBoxColumn class,可在 DataGridView 中用于单列。
现在在设计时将此列添加到 DataGridView 中,并启用 DataGrid 以添加新行,当将数据插入另一列并从此列中选择值时,ParseFormattedValue() 给出空异常。
另外,当使用代码添加新行时,GetFormattedValue() 会在它的值参数中给出 null 异常。
我在 DataGridView 中添加了两列,一列是简单的文本框列,另一列是 DataGridViewCheckBoxComboBoxColumn,在其中添加了星期名称。
现在,当我尝试通过
添加新行时dataGridView1.Rows.Add();
它在 GetFormattedValue() 中显示异常,因为它的值参数中出现空值。
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();
从该状态列表对象创建一个 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 中。现在要插入一个带有预先 select 的一些列表项的新行,您需要创建一个 Dictionary 对象,例如
Dictionary<String, Object> objSelectedDays = new Dictionary<String, Object>();
例如,如果您想从 ComboBox select 星期日和星期二,您可以写
objSelectedDays.Add("Sunday", statuses[0]);
objSelectedDays.Add("Tuesday", statuses[2]);
在此之后,当您将新行与其他数据和此 objSelectedDays 对象一起插入到 DataGridView 中时,新行将添加到网格中
datagridView1.Rows.Add("ID1", objSelectedDays);
其中 "ID1" 被插入到简单的 DataGridViewTextBoxColumn
如果您想从数据网格中读取 selected 值,然后键入将单元格转换为字典对象,例如
var values = datagridView1.Rows[0].Cells[1].Value as Dictionary<String, Object>;
然后遍历值对象数组以从特定行 CheckBoxComboBox 控件中读取 selected 值