4

请参阅我有一个具有多个值的 HashSet,这些值可以包含例如414123456742412345674261234567等数字。我在我的 UserControl 中放了一个 radioButton1,当我单击它时,我希望只有 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 开头的数字添加一个 optionButton 以及一个 optionButton 来用原始值填充 listBox,有什么建议吗?

4

5 回答 5

3

尝试

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();
}
于 2013-04-16T03:21:32.873 回答
1

试试这个:

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();
}
于 2013-04-16T03:27:12.557 回答
0

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

于 2013-04-16T03:25:56.467 回答
0

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

于 2013-12-04T13:18:45.903 回答
0

试试这个 :

DataRow dr = ((DataRowView)listBox1.SelectedItem).Row;
((DataTable)listBox1.DataSource).Rows.Remove(dr);
于 2019-05-09T12:12:32.733 回答