BindingSource 구성 요소 아키텍처

BindingSource 구성 요소를 사용하면 모든 Windows Forms 컨트롤을 데이터 원본에 보편적으로 바인딩할 수 있습니다.

BindingSource 구성 요소는 데이터 원본에 대한 컨트롤 바인딩 프로세스를 간소화하고 기존 데이터 바인딩보다 다음과 같은 이점을 제공합니다.

  • 비즈니스 개체에 대한 디자인 타임 바인딩을 사용하도록 설정합니다.

  • CurrencyManager 기능을 캡슐화하고 디자인 타임에 CurrencyManager 이벤트를 노출합니다.

  • 기본적으로 목록 변경 알림을 지원하지 않는 데이터 원본에 대한 목록 변경 알림을 제공하여 IBindingList 인터페이스를 지원하는 목록을 간소화합니다.

  • IBindingList.AddNew 메서드에 대한 확장성 포인트를 제공합니다.

  • 데이터 원본과 컨트롤 간의 간접 참조 수준을 제공합니다. 이 간접 참조는 런타임에 데이터 원본이 변경되는 경우에 중요합니다.

  • 다른 데이터 관련 Windows Forms 컨트롤, 특히 BindingNavigatorDataGridView 컨트롤과 상호 운용됩니다.

이러한 이유로 BindingSource 구성 요소는 데이터 원본에 Windows Forms 컨트롤을 바인딩하는 기본 방법입니다.

BindingSource 기능

BindingSource 구성 요소는 데이터에 컨트롤을 바인딩하기 위한 몇 가지 기능을 제공합니다. 이러한 기능을 사용하면 코딩이 거의 없는 대부분의 데이터 바인딩 시나리오를 구현할 수 있습니다.

BindingSource 구성 요소는 다양한 종류의 데이터 원본에 액세스하기 위한 일관된 인터페이스를 제공하여 이를 수행합니다. 즉 모든 형식에 바인딩하기 위한 동일한 프로시저를 사용합니다. 예를 들어 DataSource 속성을 DataSet 또는 비즈니스 개체에 연결할 수 있으며 두 경우 모두 동일한 속성, 메서드 및 이벤트 집합을 사용하여 데이터 원본을 조작할 수 있습니다.

BindingSource 구성 요소에서 제공하는 일관된 인터페이스는 데이터를 컨트롤에 바인딩하는 프로세스를 크게 간소화합니다. 변경 알림을 제공하는 데이터 원본 형식의 경우 BindingSource 구성 요소는 컨트롤과 데이터 원본 간의 변경 내용을 자동으로 전달합니다. 변경 알림을 제공하지 않는 데이터 원본 형식의 경우 변경 알림을 발생시키는 이벤트가 제공됩니다. 다음 목록에서는 BindingSource 구성 요소에서 지원하는 기능을 보여줍니다.

간접 참조

BindingSource 구성 요소는 컨트롤과 데이터 원본 간의 간접 참조 수준을 제공합니다. 컨트롤을 데이터 원본에 직접 바인딩하는 대신 컨트롤을 BindingSource에 바인딩하고 데이터 원본을 BindingSource 구성 요소의 DataSource 속성에 연결합니다.

이 수준의 간접 참조를 사용하면 컨트롤 바인딩을 다시 설정하지 않고도 데이터 원본을 변경할 수 있습니다. 그러면 다음과 같은 기능을 얻게 됩니다.

통화 관리

BindingSource 구성 요소는 통화 관리를 처리하는 ICurrencyManagerProvider 인터페이스를 구현합니다. ICurrencyManagerProvider 인터페이스를 사용하면 BindingSource에 대한 통화 관리자와 동일한 DataMember에 바인딩된 다른 BindingSource에 대한 통화 관리자에도 액세스할 수 있습니다.

BindingSource 구성 요소는 CurrencyManager 기능을 캡슐화하고 가장 일반적인 CurrencyManager 속성 및 이벤트를 노출합니다. 다음 표에서는 통화 관리와 관련된 일부 멤버에 대해 설명합니다.

CurrencyManager 속성
BindingSource과(와) 연결된 통화 관리자를 가져옵니다.

GetRelatedCurrencyManager 메서드
지정된 데이터 멤버에 바인딩된 다른 BindingSource이(가) 있는 경우 해당 통화 관리자를 가져옵니다.

Current 속성
데이터 소스의 현재 항목을 가져옵니다.

Position 속성
내부 목록에서 현재 위치를 가져오거나 설정합니다.

EndEdit 메서드
내부 데이터 소스에 보류 중인 변경 내용을 적용합니다.

CancelEdit 메서드
현재 편집 작업을 취소합니다.

목록으로 데이터 원본 지정

BindingSource 구성 요소는 IBindingListViewITypedList 인터페이스를 구현합니다. 이 구현을 사용하면 외부 스토리지 없이 BindingSource 구성 요소 자체를 데이터 원본으로 사용할 수 있습니다.

BindingSource 구성 요소가 데이터 원본에 연결되면 데이터 원본을 목록으로 노출합니다.

DataSource 속성은 여러 데이터 원본으로 설정할 수 있습니다. 여기에는 형식, 개체 및 형식 목록이 포함됩니다. 결과 데이터 소스 목록으로 노출 됩니다. 다음 표에서 일부 일반적인 데이터 원본 및 목록 계산 결과 보여 줍니다.

데이터 원본 속성 목록 결과
null 참조(Visual Basic의 경우 Nothing) IBindingList 개체입니다. 추가 된 항목의 형식으로 목록을 설정 항목을 추가 합니다.
DataMember 집합이 있는 null 참조(Visual Basic의 경우 Nothing) 지원되지 않음, ArgumentException 발생.
목록이 아닌 형식 또는 "T" 형식의 개체 "T" 형식의 빈 IBindingList.
배열 인스턴스 배열 요소를 포함하는 IBindingList.
IEnumerable 인스턴스 IEnumerable 항목을 포함하는 IBindingList
"T" 형식을 포함 하는 인스턴스 목록 "T" 형식을 포함하는 IBindingList 인스턴스.

또한 DataSource은(는) IListSourceITypedList 등 다른 목록 유형으로 설정될 수 있으며 BindingSource은(는) 그것들을 적절히 처리합니다. 이 경우 목록에 포함된 형식에는 기본 생성자가 있어야 합니다.

BindingSource를 IBindingList로 지정

BindingSource 구성 요소는 기본 데이터에 액세스하고 조작하기 위한 멤버를 IBindingList(으)로 제공합니다. 다음 표에서는 이러한 멤버에 대해 설명합니다.

멤버 Description
List 속성 DataSource 또는 DataMember 속성의 평가 결과 목록을 가져옵니다.
AddNew 메서드 내부 목록에 새 항목을 추가합니다. IBindingList 인터페이스를 구현하고 항목 추가를 허용하는 데이터 원본에 적용됩니다(즉 AllowNew 속성이 true(으)로 설정됨).

사용자 지정 항목 만들기

AddingNew 이벤트를 처리하여 고유한 항목 만들기 논리를 제공할 수 있습니다. AddingNew 이벤트는 새 개체가 BindingSource에 추가되기 전에 발생합니다. 이 이벤트는 AddNew 메서드가 호출된 후 새 항목이 기본 목록에 추가되기 전 발생합니다. 이 이벤트를 처리하면 BindingSource 클래스에서 파생하지 않고 사용자 지정 항목 만들기 동작을 제공할 수 있습니다. 자세한 정보는 방법: Windows Forms BindingSource를 사용하여 항목 추가 사용자 지정을 참조하세요.

트랜잭션 항목 만들기

BindingSource 구성 요소는 트랜잭션 항목을 만들 수 있도록 하는 ICancelAddNew 인터페이스를 구현합니다. AddNew에 대한 호출을 사용하여 새 항목을 임시로 만든 후에는 다음과 같은 방법으로 추가가 커밋되거나 롤백될 수 있습니다.

  • EndNew 메서드는 보류 중인 추가를 명시적으로 커밋합니다.

  • 삽입, 제거 또는 이동과 같은 다른 컬렉션 작업을 수행하면 보류 중인 추가가 암시적으로 커밋됩니다.

  • CancelNew 메서드가 아직 커밋되지 않은 경우 메서드는 보류 중인 추가를 롤백합니다.

IEnumerable 지원

BindingSource 구성 요소를 사용하면 IEnumerable 데이터 원본에 대한 컨트롤을 바인딩할 수 있습니다. 이 구성 요소를 사용하여 System.Data.SqlClient.SqlDataReader과(와) 같은 데이터 원본에 바인딩할 수 있습니다.

IEnumerable 데이터 원본이 BindingSource 구성 요소에 할당되면 BindingSource은(는) IBindingList을(를) 만들고 IEnumerable 데이터 원본의 내용을 목록에 추가합니다.

디자인 타임 지원

디자인 타임에 팩터리 클래스에서 만든 개체 또는 웹 서비스에서 반환된 개체와 같은 일부 개체 형식을 만들 수 없습니다. 컨트롤을 바인딩할 수 있는 개체가 메모리에 없더라도 디자인 타임에 컨트롤을 이러한 형식에 바인딩해야 하는 경우가 있습니다. 예를 들어 사용자 지정 형식의 공용 속성 이름으로 DataGridView 컨트롤의 열 헤더에 레이블을 지정해야 할 수 있습니다.

이 시나리오를 지원하기 위해 BindingSource 구성 요소는 Type에 대한 바인딩을 지원합니다. Type을(를) DataSource 속성에 할당하는 경우, BindingSource 구성 요소는 Type 항목의 빈 BindingList<T>을(를) 만듭니다. 이후에 BindingSource 구성 요소에 바인딩하는 모든 컨트롤은 디자인 타임 또는 런타임에 형식의 속성 또는 스키마가 있는지에 대한 경고를 받습니다. 자세한 내용은 방법: 유형에 Windows Forms 컨트롤 바인딩을 참조하세요.

Static ListBindingHelper 메서드

System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManagerBindingSource 형식은 모두 공통 논리를 공유하여 DataSource/DataMember쌍에서 목로을 생성합니다. 또한 이 일반적인 논리는 다음 static 메서드에서 컨트롤 작성자 및 기타 타사에서 사용하기 위해 공개적으로 노출됩니다.

IBindingListView 인터페이스를 사용하여 정렬 및 필터링

BindingSource 구성 요소는 IBindingList 인터페이스를 확장하는 IBindingListView 인터페이스를 구현합니다. IBindingList은(는) 단일 열 정렬을 제공하고 IBindingListView은(는) 고급 정렬 및 필터링을 제공합니다. IBindingListView을(를) 사용하면 데이터 원본이 이러한 인터페이스 중 하나를 구현하는 경우 데이터 원본의 항목을 정렬하고 필터링할 수 있습니다. BindingSource 구성 요소는 이러한 멤버의 참조 구현을 제공하지 않습니다. 대신 호출이 기본 목록으로 전달됩니다.

다음 표에서는 정렬 및 필터링에 사용하는 속성에 대해 설명합니다.

멤버 Description
Filter 속성 데이터 소스가 IBindingListView인 경우 표시할 행을 필터링하는 데 사용하는 식을 가져오거나 설정합니다.
Sort 속성 데이터 소스가 IBindingList인 경우 정렬에 사용되는 열 이름과 정렬 순서 정보를 가져오거나 설정합니다.

또는

데이터 소스가 IBindingListView이고 고급 정렬을 지원하는 경우 정렬에 사용되는 여러 개의 열 이름과 정렬 순서를 가져옵니다

BindingNavigator와 통합

BindingSource 구성 요소를 사용하여 모든 Windows Forms 컨트롤을 데이터 원본에 바인딩할 수 있지만 BindingNavigator 컨트롤은 BindingSource 구성 요소와 함께 작동하도록 특별히 디자인되었습니다. BindingNavigator 컨트롤은 BindingSource 구성 요소의 현재 항목을 제어하기 위한 사용자 인터페이스를 제공합니다. 기본적으로 BindingNavigator 컨트롤은 BindingSource 구성 요소의 탐색 메서드에 해당하는 단추를 제공합니다. 자세한 내용은 방법: Windows Forms BindingNavigator 컨트롤을 사용하여 데이터 탐색을 참조하세요.

추가 정보