【问题标题】:Set Item in CheckedListBox selected, if it is existend in a ListSet Item in CheckedListBox selected, if it is existend in a List
【发布时间】:2017-07-17 07:19:49
【问题描述】:

我有一个 CheckedListBox。作为数据源,我使用我自己的 Class var dataSource3 = new BindingList<Modells.Person>(); 的 BindingList。

然后我按字母顺序对它们进行排序。

var sorteddataSource3 = new BindingList<Modells.Person>(dataSource3.OrderBy(x => x.lastname).ToList());

并绑定它们。

clbPerson3.DataSource = sorteddataSource3;
clbPerson3.DisplayMember = "lastname";
clbPerson3.ValueMember = "idPerson";

我自己的班级结构如下:

public class Person
{
    public int idPerson { get; set; }
    public string firstname { get; set; }
    public string lastname { get; set; }
    public string phonenumber { get; set; }
    public string mailadress { get; set; }
    public int idCompany { get; set; }
}

现在我有另一个“人员”列表,我从 RestRequest 获得:IRestResponse&lt;List&lt;Modells.Person&gt;&gt; selectedPersons = client.Execute&lt;List&lt;Modells.Person&gt;&gt;(request);

现在的任务是在 CheckedListBox sorteddataSource3 中设置来自 selectedPersons 的人员。

此时我的解决方案是:

for (int i = 0; i < selectedPersons.Data.Count; i++)
{
    if (selectedPersons.Data[i].idCompany.Equals(comboBox3.SelectedValue))
    {
        int index3 = clbPerson3.Items.IndexOf(selectedPersons.Data[i].idPerson);
        clbPerson3.SetItemChecked(index3, true);
    }
}

首先我检查此人是否显示在 CheckedListBox 中。 之后我尝试获取该人的索引。这是我的错误。 index3 始终是 -1

我正在寻找一种解决方案来设置 CheckedListBox 中选中的项目。

【问题讨论】:

  • 您的问题似乎混淆了选择检查

标签: c# winforms datasource checkedlistbox


【解决方案1】:

问题是,selectedPersons 中的对象可能与sorteddataSource3 中的对象具有相同的值,但它们自身的对象并不相同。您需要进行某种比较。一个非常简单的方法是从sorteddataSource3 中选择也出现在selectedPersons 中的项目(至少具有相同值的对象),然后遍历这些项目(对于这个例子,我假设 idPerson 是主键):

var selectList = sorteddataSource3.Where(s => selectedPersons.Data.Any(p => p.idPerson == s.idPerson)).ToList();

foreach(Person person in selectList)
{
    int index3 = clbPerson3.Items.IndexOf(person);
    clbPerson3.SetItemChecked(index3, true);
}

【讨论】:

    【解决方案2】:

    您的clbPerson3.Items 是强类型的,每个项目都是Person 类型,并且您正在此集合中寻找数字,显然从未找到。所以你的查找函数应该有点不同,例如:

    int index3 = clbPerson3.Items.IndexOf(dataSource3.Where(p => p.idPerson == selectedPersons.Data[i].idPerson).Single());
    

    【讨论】:

      猜你喜欢
      • 2016-02-01
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多