DataGridView绑定IList<T>实时更新问题
在DataGridView绑定到DataTable时,若表中的行发生了变更(查询)时,grid中的数据会实时变更。在初始化窗口时只需要绑定一次即可。 但当DataGridView绑定到IList时,当数据源发生了变更,则grid中的数据未变更,还是上次的数据,无法达到实时更新。 --以上相信使用过的都知道这个问题。 求最好方案,以下是想到的方法,但无法达到预期效果: 1.每次查询及变更数据后,再绑定一次(费时,耗性能) 2.使用BindingSource绑定,与直接绑定差不到,也是要每次查询后再绑定才可以更新。 3.使用Bindinglist<T>进行数据转换工作,但只支持泛型转换,且当数据发生变更时,依然无法进行更新。 还是得再绑定,每次要都转换. 4.若将list 定义为IList<Customer> customerlist = new BindingList<Customer>();似乎也达不到预期效果
求最好方案: 1.能否像DataTable那样达到实时更新。 DataTable达到实时更新的机制是什么,为何list不能呢?是因为datatable中有些事件处理的机制吗? 2.能否重写一个List,以达到实时更新的效果,该从何处下手,需继承某个类或接口吗?
C# code?public IList<Customer> list = new List<Customer>(); public TestForm() { InitializeComponent(); BindGrid(); } public void BindGrid() { //将list绑定到datagridview中 dataGridView1.DataSource = list; } /// <summary> /// 查询按钮,每次查询时会从Textbox1中获取ID号,从数据库查询出 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Btn_Click(object sender, EventArgs e) { //问题:当查询条件变更后返回的LIST中的对象变更后,则datagridview中的数据未发生变更 list = GetCustomerList(TextBox1.text); // dataGridView1.DataSource = list;每次绑定觉得太费性能,若有10000数据绑定时,应该还是耗点性能吧。 } /// <summary> /// 获取返回LIST /// </summary> /// <param name="ID"></param> /// <returns></returns> private IList<Customer> GetCustomerList(string ID) { return DBHelper.GetID(ID); } 需要重新绑定
BindingSource是winform下微软提供的专用于实时更新显示的控件
如果是BindingSource.Source中发生的变化,肯定能够实时刷新 但如果跟这个没有关系了,按你描述,你似乎是想要跟数据库实时交互,这肯定不可能滴
|