如何在Windows窗体中从列表对象中删除项目

本文关键字:列表 对象 删除项目 窗体 Windows | 更新日期: 2023-09-27 18:29:10

I have a employees List in List object(objListEmp)如下所示。

Dinesh    
Upendra
Chandrakanth(Deleted)

我现在的问题是,我想在窗口应用程序的Combox中显示处于活动模式的员工,即

Dinesh    
UPendra

我将数据绑定到ComboBox的代码是

if (objListEmp != null)
{
    cmbAssignedSelector.DataSource = new BindingSource(objListEmp, null);
    cmbAssignedSelector.DisplayMember = "Value";
    cmbAssignedSelector.ValueMember = "Key";
}
else
{
    cmbAssignedSelector.SelectedIndex = 0;
}

我尝试了如下所示

if (objListEmp != null)
{
    cmbAssignedSelector.DataSource = new BindingSource(objListEmp.Where(x=>x.Value.Split('(').ToString()!="InActive").ToList(), null);
    cmbAssignedSelector.DisplayMember = "Value";
    cmbAssignedSelector.ValueMember = "Key";
}
else
{
    cmbAssignedSelector.SelectedIndex = 0;
}

如何在Windows窗体中从列表对象中删除项目

您可以使用where子句并提及谓词,该谓词只接受活动的员工(或者您可以根据您的需求设置任何其他自定义条件。)

 objListEmp = objListEmp.Where(x=>!x.Inactive).ToList();

在这种情况下,您也可以比较字符串。

 objListEmp = objListEmp.Where(x=>x.Status!=="InActive").ToList();

更改此行:

 cmbAssignedSelector.DataSource = new BindingSource(objListEmp, null);

cmbAssignedSelector.DataSource = new BindingSource(objListEmp.Where(x=>x.Isactive).ToList(), null);

如果一个IsActive字段是字符串,并且你将布尔值保存在像"True"这样的字段中,那么你需要像这个一样在之前进行强制转换

  cmbAssignedSelector.DataSource = new BindingSource(objListEmp.Where(x=>(bool)x.Isactive).ToList(), null);

如果你在字段中保存"IsActive",你只需要与字符串进行比较,如下所示:

objListEmp.Where(x=>x.Isactive.ToLower()="isactive").ToList()
if (objListEmp != null)
{
    // To remove Deleted user from list
    var sorted = from employee in objListEmp
                 where !employee.Value.Contains("Deleted")
                 select employee;
    cmbAssignedSelector.DataSource = new BindingSource(sorted, null);
    cmbAssignedSelector.DisplayMember = "Value";
    cmbAssignedSelector.ValueMember = "Key";
}
else
{
    cmbAssignedSelector.SelectedIndex = 0;
}

输出:

Dinesh
Upendra