当设置了数据源时,从列表框中删除项

本文关键字:列表 删除 设置 数据源 | 更新日期: 2023-09-27 18:09:35

我有一个有几个值的HashSet,这些值可以包含例如414123456742412345674261234567等数字。我把一个radioButton1在我的UserControl,我想当我点击这个只有414和424的数字留在我的ListBox,为此我写了这段代码:

private void radioButton1_CheckedChanged(object sender, EventArgs e)
    {
        var bdHashSet = new HashSet<string>(bd);
        if (openFileDialog1.FileName.ToString() != "")
        {
            foreach (var item in bdHashSet)
            {
                if (item.Substring(1, 3) != "414" || item.Substring(1, 3) != "424")
                {
                    listBox1.Items.Remove(item);
                }
            }
        }
    }

但是当我运行代码时,我得到了这个错误:

设置DataSource属性时,不能修改项集合。

从列表中删除不需要的项而不从HashSet中删除它们的正确方法是什么?我稍后将添加一个选项按钮,以0416和0426开始的数字,也是一个选项按钮,以填补原始值的listBox,有什么建议吗?

当设置了数据源时,从列表框中删除项

try

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    var bdHashSet = new HashSet<string>(bd);
    listBox1.Datasource = null;
    listBox1.Datasource =  bdHashSet.Where(s => (s.StartsWith("414") || s.StartsWith("424"))).ToList();
}

试试这个:

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    var bdHashSet = new HashSet<string>(bd);
    listBox1.Datasource = bdHashSet.Select(s => (s.Substring(1, 3) == "414" || s.Substring(1, 3) == "424"));
    //After setting the data source, you need to bind the data
    listBox1.DataBind();
}

我认为您可以使用linq选择元素,然后用结果重新分配listBox。通过这种方式,你不需要从列表中删除元素,你可以保留HashSet的元素。

您可以使用BindingSource对象。将它与DataSource绑定,然后使用RemoveAt()方法。

试试这个:

DataRow dr = ((DataRowView)listBox1.SelectedItem).Row;
((DataTable)listBox1.DataSource).Rows.Remove(dr);