2009-08-26 9 views
1

다음 두 가지 차이점을 이해하려고합니다.DataTables 및 바인딩 소스

첫째, 이것은 내가 현재 내의 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를 사용하면 어떤 이점이 있습니까? 다른 방법으로하는 것에 부정적입니까? 문맥 내용

, 이것은 표준 데이터 집합/DataTables 들어 SQL 2005

답변

2

를 사용하여 C#에서의 WinForm의 CRUD 앱이다 BindingSource에 불과하여 제어 및 실제 데이터 소스 사이의 간접 계층을 제공한다.

그러나, 대부분의 데이터 인식 컨트롤은 특정 데이터 소스 (그 구현은 IList, IListSource, IBindingList 또는 IBindingListView)에 결합 될 수있다. 이는 개체가 해당 인터페이스 중 적어도 하나를 구현해야하기 때문에 사용자 지정 개체를 데이터 원본으로 사용해야하는 경우 문제가됩니다.

비즈니스 개체에 전체 IList 인터페이스를 구현하거나 List 클래스에서 개체를 상속하여 BindingSource에 바인딩 한 다음 컨트롤에 바인딩 할 수 있습니다.

길고 짧은 : 특정 아니라면 데이터 소스는 항상 DataTables 수와 같은 것은 BindingSource에 사용합니다. 약간의 성능 오버 헤드가 추가되지만 인생을 훨씬 쉽게 할 수 있습니다.

또한 응용 프로그램이 상태 인 경우 매우 편리 BindingSource에,에 내장 된 아주 좋은 상태 관리 기능이 있습니다. 사용자 정의 상태 처리 코드를 작성하는 대신 BindingSource가 직접 처리하도록하십시오!

+0

? 또한 상태에 따라 데이터가 수정되었는지 여부를 알 필요가 있습니까? –

1

당신은 첫 번째 예에서와 같이, 모든 개체에 직접 바인딩 할 수 있습니다. 그러나이 객체는 컨트롤에서 시작한 이벤트에 지능적으로 응답 할 수 있도록 많은 데이터 바인딩 인터페이스를 구현해야합니다.

는 예를 들어, DataGridView에에 사람의 목록을 결합한다. 이제 열 머리글을 클릭하여 열을 정렬합니다. List는 필요한 인터페이스를 구현하지 않기 때문에 작동하지 않습니다. DataTable을 사용하여 동일한 작업을 시도하십시오. 칼럼 정렬은 마술처럼 작동합니다. DataTable은 Data Binding에 필요한 모든 인터페이스를 구현하기 때문입니다.

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

데이터 바인딩 인터페이스를 구현하는 고유 한 클래스를 작성할 수 있습니다. 그것은 많은 일을합니다. 여기에 주제에 좋은 책이다 :

는 비즈니스 객체에 대해 IList의 인터페이스를 구현하는 데 걸리는 무엇을

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