项目中遇到实时监控数据库中数据变化,该数据库中的数据只有更新没有新增。当数据库中的数据更新之后就立刻反应到form中的datagridview,但是遇到了问题。开始使用timer控件,数据源使用bindingsource,但是界面很卡。后来使用多线程,但是绘制界面还是使用UI线程,所以界面仍然不流畅。请问大家有什么好的实现方式吗?
另:前段时间有网友回答【用virtual mode+数据绑定,数据源上实现IBindingList,数据源的行上实现INotifyPropertyChanged 】,由于小生是菜鸟所以没看懂。请各位给点意见,最好提供代码。不胜感激
你可能是监控所有的数据了。你只需要监控会发生改变的数据。这个要用到ADO.NET技术。监控的数据少了,速度应该会提高的。
目前监控的数据不是很多,最多不会超过1000条,是不是哪些地方的实现方式不对啊?
@yocho: 你是监控整个dataset吗?要监控其中你要监控的列。
@PursueZhang: 我把dataset直接赋值给datagridview的,怎么监控列啊?有网友这么回答的:【用virtual mode+数据绑定,数据源上实现IBindingList,数据源的行上实现INotifyPropertyChanged 】请问是啥意思啊?
@yocho:
if (lst != null && lst.Count > 0)
{
//排序。
BindingCollection<VIEW_OPR_GoodsInfoVoucherDetails> bc = new BindingCollection<VIEW_OPR_GoodsInfoVoucherDetails>();
foreach (var item in lst)
{
bc.Add(item);
}
dgv_StatisticeDetail.DataSource = bc;
}
@yocho: 不知道监控列,可以看ADO.Net方面的书籍。里面有个方法可以的。好像是GetChange().
你可以尝试使用服务器推送,这个不会卡
能否详细说说怎么推送啊?