我按照this的说明创建多选组合框
所以我有这样的东西:
var empList = db.GetTableBySQL($"exec getTaskAssignableEmployeeList");
checkBoxComboBox1.DataSource = new Utility.ListSelectionWrapper<DataRow>(empList.Rows, "Abbreviation");
checkBoxComboBox1.DisplayMemberSingleItem = "Name";
checkBoxComboBox1.DisplayMember = "NameConcatenated";
checkBoxComboBox1.ValueMember = "Selected";
checkBoxComboBox1.Tag = empList.Rows;
checkBoxComboBox1.SelectedValueChanged += ComboEmployee_SelectedValueChanged;
如您所见,我有ComboEmployee_SelectedValueChanged
事件。因此,当我单击一个复选框时,我想将comboBox的值检索为:
private void ComboEmployee_SelectedValueChanged(object sender, EventArgs e)
{
var db = new SQLConnMgr();
var employeeComboBox = sender as CheckBoxComboBox;
var taskDataRow = employeeComboBox.Tag as DataRow;
var taskTypeName = taskDataRow["Name"] as string;
}
但是我收到错误消息,因为taskDataRow
始终为null,然后当它尝试执行var taskTypeName = taskDataRow["Name"] as string;
时我得到了:
对象引用未设置为对象的实例。'
为什么我无法从comboBox检索taskDataRow?问候
答案 0 :(得分:1)
如果您想知道选择了哪些项目,则有两个选择:
CheckBoxItems
属性,该属性是包装ComboBox.Items列表中每个项目的项目列表。 CheckBoxComboBoxItem
类是标准的CheckBox,因此,您要查找的bool值包含在Checked中。ListSelectionWrapper<T>
的引用,则可以使用该引用来访问绑定列表的Selected
属性。-
if (ComboBox.CheckBoxItems[5].Checked)
DoSomething();
OR
if (StatusSelections.FindObjectWithItem(UpdatedStatus).Selected)
DoSomething();
由于已保存了表格,因此会得到Null引用异常。在下面的行中,组合行的标记中的行而不是DataRow出现在组合框的标记中。
var taskDataRow = employeeComboBox.Tag为DataRow;
要解决此问题,请遍历CheckBoxItems,然后可以 获取选定的项目文本。之后,过滤掉 所选项目的文字或值的基础。