【问题标题】:Listbox clears all items during datasource change列表框在数据源更改期间清除所有项目
【发布时间】:2010-07-08 10:19:06
【问题描述】:

当我更改列表框的数据源时,所有项目都被清除,当将新数据加载到此列表框时,它保持清晰。 我有另一个 ListBox 是新的,具有相同的刷新代码,但刷新完美。

    private void RefreshContacts()
    {
        this.ListContacts.DataSource = null; 
        this.ListContacts.DataSource = this.contacts;
        this.BoxCountContacts.Text = this.ListContacts.Items.Count.ToString();
    }

有人知道如何解决列表框被清除和窃听的问题吗?

这是两个列表框的完整刷新代码

    private Contact[] contacts, feed; private Boolean isFeed;

    internal ArcFeed()
    { 
        this.InitializeComponent();
        this.contacts = this.feed = new Contact[0]; 
    }
    private void RefreshForm(Boolean isFeed)
    { 
        if (isFeed)
        { 
            this.RefreshFeed();
        } 
        else 
        { 
            this.RefreshContacts();
        } 
    }
    private void RefreshContacts()
    {
        this.ListContacts.DataSource = null;         
        this.ListContacts.DataSource = this.contacts;
        this.BoxCountContacts.Text = this.ListContacts.Items.Count.ToString();
    }
    private void RefreshFeed()
    {
        this.ListFeed.DataSource = null; 
        this.ListFeed.DataSource = this.feed;
        this.BoxCountFeed.Text = this.ListFeed.Items.Count.ToString();
    }
    private void OpenFile()
    {
        if (this.isFeed)
        { 
            this.BoxFileFeed.Text = this.DialogOpen.FileName;
            this.feed = ArcBuzz.Load(this.DialogOpen.FileName);
        }
        else
        {
            this.BoxFileContacts.Text = this.DialogOpen.FileName;
            this.contacts = ArcBuzz.Load(this.DialogOpen.FileName); 
        }
        this.RefreshForm(this.isFeed);
    }

所有代码都已调试并正确运行,我没有看到任何错误,正确的列表框的数据源已设置和更改。

【问题讨论】:

  • 你可以试试 ListBox1.Items.Clear(); ?
  • 真的是一样的代码吗?甚至this.ListContacts.DataSource = this.contacts; 部分?可能是数据源的问题。另外,在方法的开头使用this.ListContacts.BeginUpdate(),在方法的结尾使用this.ListContacts.EndUpdate()
  • @Jaroslav Jandek:我尝试了 .BeginUpdate() 和 .EndUpdate() 方法,但没有任何改变。
  • @Serkan Hekimoglu:无法使用 Listbox1.Items.Clear(),因为我设置了数据源且没有手动项。
  • @D. Veloper:那些 Begin/End 方法只是在您用项目填充列表时禁用列表闪烁(使用它们是一个好习惯)。在属性编辑器中检查两个 ListBox 的属性 - 类似的代码对我来说效果很好。

标签: c# winforms arrays listbox datasource


【解决方案1】:

只是为了确保,您是否检查过contacts 集合中确实有项目?

此外,如果您有两个列表框,请仔细检查您是否在每个刷新代码部分中使用了正确的列表框。

听起来很愚蠢,但像这样的愚蠢错误经常被忽视。使用数据绑定,它通常会像这样停止它的工作。

【讨论】:

  • 是的,它有几十个项目,但即使我为数据源设置了一个新集合,列表框也没有响应。
  • 你能发布你用来填充和刷新它的整个代码吗?
  • 代码对我来说看起来不错。我唯一能想到的另一件事是 Visual Studio 在设计器中做了一些有趣的事情或类似的事情。尝试删除列表框并重新添加同名的,看看问题是否仍然存在
  • @w69rdy:我已经这样做了,我复制了 ListFeed 列表框并将其重命名,没有任何变化,也许我可以尝试将控件放入新的 winform 中,因为设计器代码可能会混乱。跨度>
  • 尝试交换数据源,看看其他列表框是否停止工作。如果是这样,那么它可能是数据源的问题。
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 2011-09-24
相关资源
最近更新 更多