2011-10-13 53 views
0

我已經實現自動完成下拉列表中的WPF綁定和搜索大型數據表

這是給問題,當一個大的數據(超過30 MB說的)是綁定到它

什麼是最好的方法在大數據工作(如搜索操作)

是否有可能連載30點MB的數據,並在自動完成下拉列表的用戶類型,搜索

到串行數據

,重視結果數據下拉列表和顯示它給用戶

請建議...

回答

0

通常你應該把耗時的操作在BackgroundWorker.DoWork事件處理程序不設置如上控件的屬性。如果要設置在BackgroundWorker.DoWork事件處理程序的另一個線程中創建的控件的屬性,則應該使用Control.Invoke方法異步設置屬性。 nevertherless下面的代碼是更好的解決方案:

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"); 
} 
0

是使用ICollectionView.Filter您自動完成的文本框來搜索值?

如果是,那麼對於大數據集是同步的,它肯定會很慢。

使用PLINQ您的優勢。

當用戶在文本框中鍵入文本時,對以\開頭的條目執行PLINQ查詢,該條目包含鍵入的文本,然後在PLINQ查詢返回後重新綁定itemssource。

如果你不能使用PLINQ或者沒有.Net 4.0,那麼在不同的線程上執行簡單的LINQ搜索並重新綁定自動完成框的Dispatcher

+0

嗨,感謝您的評論。但是如果我在應用程序中獲取大約30 MB的數據,應用程序內存將增加。所以在客戶端獲取所有數據是否可行? – MMP

+0

是的,爲什麼不呢?這是一個桌面應用程序正確嗎?對於32位系統,至少擁有4GB的虛擬內存。 –