在SelectedValueChange事件中获取comboBox的当前值

时间:2018-09-25 01:48:48

标签: c# winforms

我按照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?问候

1 个答案:

答案 0 :(得分:1)

如果您想知道选择了哪些项目,则有两个选择:

  1. 使用ComboBox上的CheckBoxItems属性,该属性是包装ComboBox.Items列表中每个项目的项目列表。 CheckBoxComboBoxItem类是标准的CheckBox,因此,您要查找的bool值包含在Checked中。
  2. 或者,如果您存储了对ListSelectionWrapper<T>的引用,则可以使用该引用来访问绑定列表的Selected属性。

-

if (ComboBox.CheckBoxItems[5].Checked)  
            DoSomething();

OR

if (StatusSelections.FindObjectWithItem(UpdatedStatus).Selected)
    DoSomething();

由于已保存了表格,因此会得到Null引用异常。在下面的行中,组合行的标记中的行而不是DataRow出现在组合框的标记中。

var taskDataRow = employeeComboBox.Tag为DataRow;

  

要解决此问题,请遍历CheckBoxItems,然后可以   获取选定的项目文本。之后,过滤掉   所选项目的文字或值的基础。