2014-09-22 69 views
0

我正在编写代码,最终使用数据绑定将数据从远程数据库拖入DataGridView。我目前正在创建代码来处理CSV文件和BindingList作为测试。BindingList ListChanged事件不会触发,直到填充数据?

我想要在我的表单上显示上次更新数据库的时间。我目前在我的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 
} 

我想为我的延迟更新最初被填充的列表。任何人都可以想到为什么这不起作用的任何原因?

非常感谢。

+2

是'ParseCsv'返回一个新的'BindingList' ?,如果是这样,最有可能的原因,尝试清除绑定列表并添加项目,事件将很有可能在这种情况下工作。 – 2014-09-22 05:04:01

+1

这就是问题...业余时间!发布回复,我会将其标记为最佳答案。 – janderson 2014-09-22 05:16:30

回答

1

线

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

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

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

+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 – 2015-10-15 11:16:00

+0

如果您阅读了评论,它实际上会回答这个问题。我做出回答而不是评论,因此@janderson可以将其标记为已回答 – 2015-10-15 12:32:30

+0

@TobiasLiefke OP已经留下了一条评论,建议sa_ddam213将其作为一年多前的答案发布。这不会发生。如果他们真的回答了这个问题,就没有政策反对张贴其他人的评论作为答案。评论区域不是答案应该发布的地方,答案区域是,并且Phoenix_uy通过尝试将答案移动到适当的位置来解决问题是正确的。充其量,你可以说如果这个答案被标记为Community Wiki,它会很好,但即便如此,也不需要这样做。 – hvd 2015-10-16 10:45:32