【问题标题】:How to get the value of the checkListBox如何获取checkListBox的值
【发布时间】:2015-09-30 15:23:15
【问题描述】:

我正在开发一个 Windows 窗体应用程序,并且我有一个绑定到我的数据库的 checkListBox。我正在使用参数方法来存储选定的文本。但是,我想获得类似于comboBox.SelectedValue 而不是文本的该项目的主键。有没有办法做到这一点?

这是我的代码。如您所见,该参数由checkedItem 文本过滤。当我从我的 checkListBox 中选择我的checkedItem 时,它假设只获取选定的项目。如果我的 CheckListBox 项目有 Peter、Amy、Bob 和 David(非重复名称)之类的内容,则此工作正常。但是,如果我的 checkListBox 有重复的名称。彼得,艾米,艾米,鲍勃,大卫,艾米,这会引起问题。如果我选择第一个 Amy,My parameterList 将有 Amy、Amy、Amy。这是一个问题,因为我正在按我的名字过滤它(所以每当他们看到相同的名字时,它都会添加到parameterList。我真正想要的是通过一个键(例如employeeId)进行过滤,这样它就不会有任何我的parameterList 中的重复名称。(就像我从comboBox.selecteIndex 更改为comboBox.selectedValue 时一样)。当我只选择第一个Amy 时,我的parameterList 应该只有一个选中的Amy,但不是所有的Amy t 甚至检查。我想知道是否可以从我的组合框值`中执行类似 selectedValue 的操作来映射数据库值?将不胜感激

例如这里是我的checkListBox:

[x]Amy
[]Peter
[]David
[]Amy
[]Amy
[]Jimmy

您只能看到第一个 Amy 被选中。但是我的 parameterList 有 Amy、Amy、Amy,因为我是按名字过滤的。

    string parameterList = "";
    int parameterCounter = 0;

    // Add a parameter placeholder for each "checked" item
    for (var t = 0; t < employeeCheckListBox.CheckedItems.Count; t++)
    {
        parameterList += (t == 0) ? "@p" + t : ", @p" + t;

    }

    string query = "select distinct firstName, lastName, employeeEmail, 
                           entryYear, leaveYear 
                    from[employee_detail] as ed 
                    LEFT JOIN[department_detail] as dd ON ed.employeeId = dd.employeeId
                    Where firstName = (" + parameterList + ")";

    myCommand = new SqlCommand(query, myConn);

    for (var t = 0; t < employeeCheckListBox.CheckedItems.Count; t++)
    {
        myCommand.Parameters.AddWithValue ("@p" + t, employeeCheckListBox.CheckedItems[t].ToString());
    }      
    if (employeeCheckListBox.CheckedItems.Count == 0)
    {    
        myCommand = new SqlCommand(Equery, myConn);
    }

这是我想要改变的地方

string query = "select distinct firstName, lastName, employeeEmail, 
                               entryYear, leaveYear 
                        from[employee_detail] as ed 
                        LEFT JOIN[department_detail] as dd ON ed.employeeId = dd.employeeId
                        Where firstName = (" + parameterList + ")";

//parameterList应该是checkListBox的选中值

【问题讨论】:

  • This SO question 应该可以帮到你。
  • 你的问题对我来说没有多大意义..可能需要编辑..
  • @AmneshGoel,我已经编辑了我的问题,看看这是否有意义
  • @DragonBorn 加入聊天室详细讨论这个问题

标签: c#


【解决方案1】:

您的问题是您有多个同名员工,并且 您的用户将如何在 UI 上区分它们。

因此,解决此问题的一个非常简单快速的方法是,更改您在复选框列表中显示的 UI 上的内容。

由于每个员工都有唯一的电子邮件 ID...所以显示 EmailID 和姓名...更改您的查询如下...

select td.teacherId as ID, chineseName + ' ' + email as Name from[teacher_detail] .....

【讨论】:

    【解决方案2】:

    尝试使用this问题中提到的员工记录的任何ID设置值成员

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      相关资源
      最近更新 更多