【发布时间】:2011-10-13 10:31:41
【问题描述】:
我已经在 WPF 中实现了自动完成下拉列表
当绑定大数据(比如超过 30 MB)时会出现问题
处理大数据的最佳方法是什么(搜索等操作)
是否可以序列化 30 MB 数据并作为用户类型在自动完成下拉列表中搜索
输入序列化数据并将结果数据附加到下拉列表并显示给用户
请建议...
【问题讨论】:
标签: wpf serialization datatable
我已经在 WPF 中实现了自动完成下拉列表
当绑定大数据(比如超过 30 MB)时会出现问题
处理大数据的最佳方法是什么(搜索等操作)
是否可以序列化 30 MB 数据并作为用户类型在自动完成下拉列表中搜索
输入序列化数据并将结果数据附加到下拉列表并显示给用户
请建议...
【问题讨论】:
标签: wpf serialization datatable
通常您应该将耗时的操作放在 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");
}
【讨论】:
您的自动完成文本框是否使用ICollectionView.Filter 来搜索值?
如果是,那么大数据集同步肯定会很慢。
充分利用 PLINQ。
当用户在文本框中键入文本时,对以 \ 开头的条目执行 PLINQ 查询,其中包含键入的文本,然后在 PLINQ 查询返回后重新绑定 itemssource。
如果您不能使用 PLINQ 或没有 .Net 4.0,则在不同的线程上执行简单的 LINQ 搜索并重新绑定自动完成框的 Dispatcher。
【讨论】: