当前位置:编程学习 > C#/ASP.NET >>

谁对System.Windows.Forms下的BindingSource熟悉的,过来看看啊~~

1. 在一个Windows Form中,在该Form中有一个DataGridView和一个ComboBox。
2. 我添加一个BindingSource绑定一个DataTable(名为 _dt,有“ID”和“Name”这2列),并对该BindingSource设置了属性DataSource为_dt,并设置了属性Filter = "ID >=1 AND ID <=4"。
3. 设置DataGridView的属性DataSource为这个BindingSource,设置ComboBox的属性DataSource = _dt,DisplayMember = "Name"
4. 运行发现ComboBox下拉列表中的数据(包括排序)和DataGridView中Name列的数据一致。点击DataGridView的列头进行排序,ComboBox下拉列表数据也跟着排序...
5. 疑问:本来以为是虽然BindingSource设了Filter,应该不影响ComboBox的绑定,因为ComboBox直接绑定到_dt的。现在是这个_dt只要与BindingSource绑定在一起,那么其他的UI控件不管绑定到这个BindingSource还是直接绑定到_dt,都会同步响应。
6. 有没有一个解决方案,让不同的UI控件绑定到同一个DataTable,能够同步响应DataTable的变化:数据的新增、修改、删除,但某个控件对DataTable的数据筛选、排序、定位的行为不会影响到其他的UI控件使之作出相应的响应?
7. 我试了 继承这个BindingSource组件(暂叫MyBindingSource),比如仅想先解决排序问题:override其中的virtual方法:void ApplySort(PropertyDescriptor property, ListSortDirection sort)   然后将该MyBindingSource替换微软的BindingSource,运行后点击DataGridView列头未实现排序,因为绑定模式下的DataGridView排序是要数据源先做排序的。除非手工让DataGridView排序。所以我觉得这种方法不是很好的方法。
8. 根据上面的试验,如果我还是用本来的BindingSource,点击DataGridView排序后,我认为_dt做了相应的排序。但是我foreach每个DataRow到另一个ListView,发现顺序和_dt最初数据加载的顺序一致。也就是说不管DataGridView怎么排序,我再foreach得到的_dt数据存放顺序并未改变。 --------------------编程问答-------------------- 我自己顶一下。
兄弟们,过来讨论下吧~~ --------------------编程问答-------------------- 没有详细看,字数太多,最好不要手动绑定,通过程序去实现
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,