【问题标题】:foreach Loop add items to comboboxforeach 循环将项目添加到组合框
【发布时间】:2014-02-08 16:24:00
【问题描述】:

我想遍历一个人员对象列表,每个人都有一些不同的品质,比如一个人有一本书,另一个人有一张桌子,但所有人都有相同的姓名、ID、电子邮件,和姓氏。当我循环浏览它时,它会将每个具有不同品质的人添加到我的组合框中。我只希望它将一个人的 .ToString 添加到组合框中。我希望以后能够使用 combobox.selectedItem 来获取该项目的质量。这是我的代码:

foreach (Person personObj in _listAllData)
{
    if (!cboSelectClient.Items.Contains(personObj.ID))
    {
        cboSelectClient.Items.Add(personObj.ToString());
    }
}

任何建议都会有所帮助,谢谢。

【问题讨论】:

  • 如果只将ToString 方法的结果放入组合框中,SelectedItem 将只包含字符串。但是请注意,默认情况下,您应该能够将人员对象本身添加到您的组合框中(然后应该会自动显示他们的 ToString 返回值)。
  • 如果我将语句更改为 cboSelectClient.Items.Add(personObj);它将所有人添加到我的组合框中
  • 我只希望它显示其中一个人

标签: c# list loops foreach


【解决方案1】:

如果我理解您要正确执行的操作:

cboSelectClient.Items.Add(personObj.ToString());

将表示为单个字符串的整个人对象添加到组合框中。 在if 子句中,您只检查人员对象的ID

所以您的if 子句正在寻找一个仅匹配该人的ID 的字符串,但您的组合框包含列为ID + other details of the person 的元素。除非某个人对象的组合框中只列出了他的“ID”,否则它们永远不会匹配。

您可能必须遍历组合框中的每个项目并检查每个项目是否具有您正在寻找的“ID”作为子字符串。

【讨论】:

    【解决方案2】:

    这个 linq 能帮到你

     Foreach (var personObj in _listalldata.group(v=>v.id).select(s=>new { id = s.First().id}).tolist())
      {
                    if (!cboSelectClient.Items.Contains(personObj.id))
                    {
                        cboSelectClient.Items.Add(personObj.id.ToString());
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多