2012-04-22 19 views
13

通過設置DataSource屬性,我可以直接將DataGridView控件綁定到業務對象的綁定列表。我的業務對象實現INotifyPropertyChanged,因此當新項目添加到綁定列表或現有更新項目時,DGV會得到更新。將綁定列表<business obj>用作數據源的綁定源的好處是什麼?

關於處理單個記錄,我可以將我的業務對象綁定到文本框和其他相關控件。

我還可以從獲得的BindingList並創建一個CustomBindingList類來實現IBindable必要方法,如下面的鏈接解釋說: http://msdn.microsoft.com/en-us/library/aa480736.aspx

另外,我看到有人建議使用的BindingSource。 BindingSource的Datasource是業務對象,DGV的DataSource是BindingSource。

在任何情況下,使其基於一個BindingSource的不給我:

  1. 過濾(過濾器不工作)。實施需要由我提供。
  2. 排序和搜索不起作用。實施需要由我提供。

那麼,爲什麼推薦使用BindingSource方法?

更寬的圖片: 剛剛接觸OOPS概念和C#。使用數據庫應用程序。的WinForms。到目前爲止只使用了DataSet/DataTable方法。現在試圖創建和使用我自己的自定義類。

通常具有主/明細表格。當我點擊DGV中的Detail行時,我想在單獨的窗口中編輯該記錄。所以我需要在DGV中的那一行表示的列表項上獲得一個句柄。試圖找到一個解決方案已經給我帶來了這一點和這種懷疑。

鑑於我想要做什麼,哪種方法更好,爲什麼?

這裏的一些指針會非常有幫助,因爲我對此很陌生。

+0

[C#DataGridView.DataSource使用BindingSource而不是]之間的可能重複(http://stackoverflow.com/questions/4433281/c-sharp-datagridview-datasource-difference-between-using-bindingsource-and-not ) – 2016-06-09 10:09:28

回答

1

建議使用的BindingSource在窗體上的多個控件使用相同的數據源(Behind the Scenes: Improvements to Windows Forms Data Binding

設計時:我個人覺得BindingSource的非常有益的數據綁定到時候從我的業務對象選擇屬性時控制。

要獲取當前選定行的句柄,請嘗試bindingSource1.Current作爲MyBusinessObject;

至於過濾和搜索:我使用第三方DLL的網格已經實現。所以幫不了你,抱歉。

當你與不同類型的業務對象名單的工作,不要使用名單直接

List<IAnimal> animals = new List<IAnimal>(); 
animals.Add(new Cat()); 
animals.Add(new Dog()); 
bindingSource1.DataSource = animals; 

而是使用像這樣的的BindingList:

bindingSource1.DataSource = new BindingList<IAnimal>(animals); 

,將確保所有訪問列表中的對象的類型爲IAnimal,併爲您節省一些例外。

0

綁定到DataSource可以在處理大集合時給你帶來好處,只有其中一部分被顯示。例如,如果你看看這裏的Telerik ListView http://www.telerik.com/help/winforms/listview-databinding.html(這裏有很多這樣的組件包,這只是我使用的最新的一個組件)。

該視圖非常輕便,可以讓您的滾動位置確定需要實際顯示哪些對象。所以如果你只看前10個對象,永遠不會向下滾動,只有10個對象被綁定和顯示。這可能避免了大量不必要的數據訪問。

他們的GridView以相同的方式工作。顯示的網格部分與潛在的巨大底層網格分開。

作爲獎勵,你可以過濾,排序,分組。

-2

據我所知,如果你是一個數據庫工作,你才能建立數據庫和控制之間的雙邊橋使用BindingSource的在中間。 否則您可以僅使用一個bindingList作爲您的控件的源代碼。