我在WPF中实现了自动完成下拉列表
当大数据(例如超过30 MB)绑定到它时会出现问题
处理大数据的最佳方法是什么(搜索等操作)
是否可以序列化30 MB数据,并且可以在自动完成下拉列表中搜索用户类型,搜索
进入序列化数据并将结果数据附加到下拉列表并显示给用户
请建议......
答案 0 :(得分:0)
通常,您应该在BackgroundWorker.DoWork事件处理程序中放置耗时的操作,而不是如上所述设置控件属性。如果要设置在BackgroundWorker.DoWork事件处理程序中的另一个线程中创建的控件属性,则应使用Control.Invoke方法异步设置属性。以下代码是更好的解决方案:
toolStripStatusLabel1.Text = "Loading ... ";
enter code here` backgroundWorker1.RunWorkerAsync();
enter code here`backgroundWorker1_DoWork(/*arguments*/)
{
// getting data from database and fill dataset
}
backgroundWorker1_RunWorkerCompleted(/*arguments*/)
{
dt_kh = ds.Tables[0];
cboMaKH.DataSource = ds.Tables[0];
cboMaKH.DisplayMember = "MaKH";
cboMaKH.ValueMember = "MaKH";
cboTenCty.DataSource = ds.Tables[0];
cboTenCty.DisplayMember = "TenCty";
cboTenCty.ValueMember = "TenCty";
cboMaKH.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
cboMaKH.AutoCompleteSource = AutoCompleteSource.CustomSource;
cboMaKH.AutoCompleteSource = AutoCompleteSource.ListItems;
cboTenCty.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
cboTenCty.AutoCompleteSource = AutoCompleteSource.CustomSource;
cboTenCty.AutoCompleteSource = AutoCompleteSource.ListItems;
txtTenKH.DataBindings.Add("Text", ds.Tables[0], "TenKH");
txtDiaChi.DataBindings.Add("Text", ds.Tables[0], "Diachicty");
txtDienThoai.DataBindings.Add("Text", ds.Tables[0], "DienThoaiCty");
txtTaiKhoan.DataBindings.Add("Text", ds.Tables[0], "TaiKhoanCty");
txtVIMST.DataBindings.Add("Text", ds.Tables[0], "MSTCty");
}
答案 1 :(得分:0)
使用ICollectionView.Filter
的自动填充文本框是否可以搜索值?
如果是,那么大型数据集同步的速度肯定很慢。
使用PLINQ对您有利。
当用户在文本框中键入文本时,对以#开头的条目执行PLINQ查询,包含键入的文本,然后在PLINQ查询返回后重新绑定itemssource。
如果你不能使用PLINQ或者没有.Net 4.0,那么在另一个线程上执行简单的LINQ搜索并重新绑定自动完成框的Dispatcher
。