【问题标题】:BindingList ListChanged event not firing until filled with data?BindingList ListChanged 事件在填充数据之前不会触发?
【发布时间】:2014-11-15 23:58:39
【问题描述】:

我正在编写代码以最终使用数据绑定将数据从远程数据库中提取到 DataGridView 中。我目前正在创建代码以使用 CSV 文件和 BindingList 作为测试。

我想在我的表单上显示上次更新数据库的时间。我目前正在使用 BindingList 上的 ListChanged 事件来更新“上次数据库更新”显示。

ListChanged 事件似乎只有在最初填充数据库后连接时才会触发。这是我的类中扩展 DataGridView 的一些代码:

BindingList<CsvTest> Data = new BindingList<CsvTest>;

public void InitGrid()
{
    // Data.ListChanged += Data_ListChanged;  // Event never fires if this is here!
    Data = CsvTest.ParseCsv("test.csv");
    Data.ListChanged += Data_ListChanged;     // Working when it's here!
    this.DataSource = Data; // DataGridView DataSource
}

我希望延迟更新,因为列表最初已填充。谁能想到这不起作用的任何原因?

非常感谢。

【问题讨论】:

  • ParseCsv 返回一个新的BindingList?,如果是这样,这很可能是原因,请尝试清除绑定列表并添加项目,该事件很可能在这种情况下起作用。跨度>
  • 这就是问题所在……业余时间!发表回复,我会将其标记为最佳答案。

标签: c# events data-binding binding datagridview


【解决方案1】:

线

Data = CsvTest.ParseCsv("test.csv");

会覆盖你Data变量的内容。之前设置的任何值(例如Data.ListChanged)都将属于旧的BindingList 对象。并且您的新 BindingList 对象没有该值,直到您设置它。

如果您想设置ParseCsv之前的值,则必须清除Data中的BindingList,然后添加ParseCsv中的所有项目。

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • 如果您阅读 cmets,它实际上会回答问题。我回答而不是评论,所以@janderson 可以将其标记为已回答
  • @TobiasLiefke OP 已经发表评论,建议 sa_ddam213 一年多前将其作为答案发布。这不会发生。如果他们真的回答了这个问题,也没有政策反对发布其他人的 cmets 作为答案。评论区不是应该发布答案的地方,答案区是,Phoenix_uy 通过尝试将答案移动到适当的位置来解决问题是正确的。充其量你可以说如果这个答案被标记为 Community Wiki 会很好,但即使这样也没有要求这样做。
猜你喜欢
  • 2020-01-16
  • 2010-11-23
  • 1970-01-01
  • 2012-10-28
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多