问题描述
c#listview或datagridview显示动态添加的数据,效果是局部(刷新)添加数据,添加新数据同时对操作原显示数据无影响
解决方案
解决方案二:
你说的添加新数据是重新绑定,还是在原基础上增加行?
解决方案三:
引用1楼dongxinxi的回复:
你说的添加新数据是重新绑定,还是在原基础上增加行?
增加行例如:listview展示如下:1abc2def3ghi一段时间数据库有新数据1abc2def3ghi4jkl5mnp
解决方案四:
无非就是比较两条数据是非“一样”嘛傻瓜式的实现,可以在表中加一个timestamp类型的version字段,表示这条纪录的版本,你可以给grid增加一个隐藏列来保存它只要执行过update,这个字段就会发生变化,程序里只需要判断主键相同的两条数据的version是否相同,相同就不用更新了灵活一点就自定义判断逻辑,假定你的数据源是List<TModel>,classTModel:IEqualityComparer<TModel>{publicboolEquals(TModelnew,TModelold){判定相同逻辑}//字典等与HASH算法相关的publicintGetHashCode(TModelobj){return(上面方法比较的字段的组合).GetHashCode();})
假设新数据为List<TModel>data;直接更新源:dgv.DataSource=data.Except(dgv.DataSourceasIEnumerable<TModel>).ToList();但是这样是一次更新,不是局部刷新,你可以借助vards=newBindingList(List<TModel>);foreach(varitemindata){if(!ds.Contains(item)){ds.Add(item);}}
这里的Contains决定于BindingList构造函数集合类型的实现,也就是List<T>.Contains()方法内部又是根据IEqualityComparer<TModel>也就是上面你自己的实现
解决方案五:
用这2个方法试试,都可以listView1.Items.Contains();listView1.Items.ContainsKey("");