2009-08-26 202 views
1

我想了解以下兩個示例之間的區別。數據表和綁定源

首先,這是我目前如何將數據分配給我的WinForm應用程序中的控件。

lkuCounty.Properties.DataSource = Person.CountyList(); 
lkuCounty.Properties.PopulateColumns(); 
lkuCounty.Properties.DisplayMember = "CountyName"; 
lkuCounty.Properties.ValueMember = "CountyID"; 
lkuCounty.Properties.Columns[0].Visible = false; 
lkuCounty.Properties.Columns[2].Visible = false; 
lkuCounty.Properties.Columns[3].Visible = false; 

這似乎工作,雖然我承認,如果它稍微關閉,我可能缺乏只看代碼的經驗。另外值得注意的是,Person.CountyList()實際上會返回一個DataTable:\

現在怎麼樣all of the examples我覺得我應該這樣做。

memberBindingSource.DataSource = Person.CountyList(); 
lkuCounty.Properties.DataSource = memberBindingSource; 
lkuCounty.Properties.PopulateColumns(); 
lkuCounty.Properties.DisplayMember = "CountyName"; 
lkuCounty.Properties.ValueMember = "CountyID"; 
lkuCounty.Properties.Columns[0].Visible = false; 
lkuCounty.Properties.Columns[2].Visible = false; 
lkuCounty.Properties.Columns[3].Visible = false; 

使用BindingSource有什麼好處嗎?以另一種方式做這件事有消極嗎?

對於上下文中,這是使用SQL 2005

回答

2

對於標準數據集/數據表在C#一個WinForm CRUD應用程序,BindingSource的僅僅提供您的控制和實際的數據源之間的間接的另一層。然而,大多數數據感知控件只能綁定到某些數據源(那些實現IList,IListSource,IBindingList或IBindingListView)的數據源。如果您需要使用自定義對象作爲數據源,則會出現問題,因爲所述對象需要至少實現其中一個接口。

因此,您可以在業務對象中實現整個IList接口 - 也可以從List類繼承對象,並將其綁定到BindingSource,然後將其綁定到Control(s)。

長和短:除非您確定您的數據源將始終是DataTables之類,請使用BindingSource。它確實增加了輕微的性能開銷,但它可以讓你的生活變得更容易。

BindingSource還內置了一些非常好的狀態管理功能,如果您的應用程序是有狀態的,它非常方便。而不是編寫自定義狀態處理代碼,只需讓BindingSource爲您處理事情!

+0

那麼將會爲業務對象上實現一個IList接口?此外,有狀態的,你的意思是需要知道數據是否已被修改? – 2009-08-26 17:47:33

1

您可以直接綁定到任何對象,如第一個示例中所示。但是,該對象需要實現許多數據綁定接口,才能對控件觸發的事件進行智能響應。

例如,將人員列表綁定到DataGridView。現在,單擊列標題對列進行排序。它不起作用,因爲List沒有實現所需的接口。用DataTable嘗試同樣的事情。列分類魔術般的工作。這是因爲DataTable爲數據綁定實現了所有需要的接口。

public class Person 
    { 
     public string Name { get; set; } 
     public int Age { get; set; } 

    } 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     //does not sort... 
     dataGridView1.DataSource = new List<Person> 
     { 
      new Person{ Age=11, Name="Jimmy" }, 
      new Person{ Age=12, Name="Suzie" } 
     }; 
    } 

您可以編寫自己的類來實現數據綁定接口。這是很多工作。這裏是一個偉大的書上的題目:

Data Binding with Windows Forms 2.0: Programming Smart Client Data Applications with .NET