为了改变列表项目,将ListBox DataSource属性设置为null是错误的吗?

问题描述 投票:2回答:2

我发现Items.Clear并不总是清除列表框,当列表框已经通过DataSource填充时。 将DataSource设置为Null后,就可以用Items.Clear()清除它。

这样做是不是错了? 我这样做的思路是不是有点错?

谢谢。

下面是我准备的代码来说明我的问题。它包括一个Listbox和三个按钮。

如果你按这个顺序点击按钮,所有的东西都能正常工作。

  1. "用数组填充列表 "按钮
  2. 用阵列填充列表项目按钮
  3. 用数据源填充列表项目按钮

但是如果先点击 "用DataSource填充列表项 "按钮,点击其他两个按钮中的任何一个都会导致这个错误。"在System.Windows.Forms.dll中发生了一个类型为'System.ArgumentException'的未处理异常",并提示 "当DataSource属性被设置时,Items集合不能被修改"。

有什么意见?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void btnFillListWithArray_Click(object sender, EventArgs e)
    {
       string[] myList = new string[4];

        myList[0] = "One";
        myList[1] = "Two";
        myList[2] = "Three";
        myList[3] = "Four";
        //listBox1.DataSource = null;  <= required to clear list
        listBox1.Items.Clear();
        listBox1.Items.AddRange(myList);
    }

    private void btnFillListItemsWithList_Click(object sender, EventArgs e)
    {
        List<string> LStrings = new List<string> { "Lorem", "ipsum", "dolor", "sit" };
        //listBox1.DataSource = null;  <= required to clear list
        listBox1.Items.Clear();            
        listBox1.Items.AddRange(LStrings.ToArray());

    }

    private void btnFillListItemsWithDataSource_Click(object sender, EventArgs e)
    {
        List<string> LWords = new List<string> { "Alpha", "Beta", "Gamma", "Delta" };
        //listBox1.DataSource = null;  <= required to clear list
        listBox1.Items.Clear();
        listBox1.DataSource = LWords;

    }
}
c# winforms listbox datasource
2个回答
1
投票

如果你的列表框绑定到一个数据源,那么这个数据源就会成为列表框的 "主人"。所以,如果列表框绑定到LWords,你做Lwords.clear(),列表框就会被清空,这是正确的行为,因为这就是数据绑定的目的。

如果你把datasource设置为null,基本上就是告诉listbox它不再是databound了。当然,它的副作用是变成了空。但根据情况,你可能不希望只清除listbox,而是希望同时清除datasource和listbox。

假设你想通过GUI清除LWords,而LWords是你的listbox的源头,你按了一个按钮,你把datasource设置为null,你看到listbox变成了空的,以为LWords不是空的,但LWords根本不是空的,那么在这种情况下,这将是一个bug。


2
投票

根据微软的说法,似乎将Datasource设置为Null然后Clearing列表是可以接受的。

资料来源:http:/support.microsoft.com。http:/support.microsoft.comkb319927

© www.soinside.com 2019 - 2024. All rights reserved.