데이터 바인딩 개요(Windows Forms .NET)

Windows Forms에서는 기존의 데이터 소스뿐 아니라 데이터를 포함하는 거의 모든 구조에 바인딩할 수 있습니다. 런타임에 계산하거나 파일에서 읽거나 다른 컨트롤의 값에서 파생하는 값 배열에 바인딩할 수 있습니다.

또한 컨트롤의 속성을 데이터 소스에 바인딩할 수도 있습니다. 일반적인 데이터 바인딩에서는 대개 표시 속성(예: Text 컨트롤의 TextBox 속성)을 데이터 소스에 바인딩합니다. .NET를 사용하면 바인딩을 통해 다른 속성도 설정할 수 있는 옵션이 있습니다. 바인딩을 사용하여 수행할 수 있는 작업은 다음과 같습니다.

  • 이미지 컨트롤의 그래픽 설정

  • 컨트롤 하나 이상의 배경색 설정

  • 컨트롤의 크기 설정

기본적으로 데이터 바인딩은 폼에 있는 컨트롤의 런타임 액세스 가능 속성을 자동으로 설정하는 방법입니다.

ADO.NET을 사용하면 애플리케이션과 처리할 데이터의 바인딩 요구를 충족시킬 다양한 데이터 구조를 만들 수 있습니다. Windows Forms에서 데이터를 제공하거나 사용하는 고유 클래스를 만들고 싶을 수도 있습니다. 이러한 개체는 다양한 수준의 기능과 복잡성을 제공할 수 있습니다. 기본 데이터 바인딩부터 디자인 타임 지원, 오류 확인, 변경 사항 알림, 심지어 데이터 자체에 적용된 변경 내용의 구조화된 롤백 지원을 제공합니다.

데이터 바인딩 인터페이스의 소비자

다음 섹션에서는 두 그룹의 인터페이스 개체를 설명합니다. 인터페이스의 첫 번째 그룹에서는 데이터 소스 작성자에 의해 데이터 소스에 구현됩니다. Windows Forms 컨트롤 또는 구성 요소와 같은 데이터 원본 소비자는 이러한 인터페이스를 구현합니다. 두 번째 인터페이스 그룹은 구성 요소 작성자가 사용하도록 설계되었습니다. 구성 요소 작성자는 Windows Forms 데이터 바인딩 엔진에서 사용할 데이터 바인딩을 지원하는 구성 요소를 만들 때 이러한 인터페이스를 사용합니다. 이러한 인터페이스를 양식과 연결된 클래스 내에서 구현하여 데이터 바인딩을 사용하도록 설정할 수 있습니다. 각 사례는 데이터와의 상호 작용을 가능하게 하는 인터페이스를 구현하는 클래스를 제공합니다. Visual Studio RAD(신속한 애플리케이션 개발) 데이터 디자인 환경 도구는 이미 이 기능을 활용하고 있습니다.

데이터 소스 작성자가 구현할 수 있는 인터페이스

Windows Forms 컨트롤은 다음 인터페이스를 구현합니다.

  • IList 인터페이스

    IList 인터페이스를 구현하는 클래스는 Array, ArrayList 또는 CollectionBase일 수 있습니다. 이러한 항목은 형식의 항목의 인덱싱된 목록이며 인덱스의 첫 번째 항목이 형식 Object을(를) 결정하기 때문에 목록에는 동종 형식이 포함되어야 합니다. IList는 런타임에만 바인딩에 사용할 수 있습니다.

    참고

    Windows Forms와 바인딩할 비즈니스 개체 목록을 만들려면 BindingList<T>를 사용하는 것이 좋습니다. BindingList는 양방향 Windows Forms 데이터 바인딩에 필요한 기본 인터페이스를 구현하는 확장 가능한 클래스입니다.

  • IBindingList 인터페이스

    IBindingList 인터페이스를 구현하는 클래스는 훨씬 더 높은 수준의 데이터 바인딩 기능을 제공합니다. 이 구현은 기본 정렬 기능 및 변경 알림을 제공합니다. 둘 다 목록 항목이 변경되고 목록 자체가 변경되는 경우에 유용합니다. 여러 컨트롤을 동일한 데이터에 바인딩하려는 경우 변경 알림이 중요합니다. 컨트롤 중 하나에서 데이터를 변경하여 다른 바인딩된 컨트롤로 전파하는 데 도움이 됩니다.

    참고

    true일 때 ListChanged 이벤트를 발생시켜 목록 변경이나 목록의 항목 변경을 나타내는 SupportsChangeNotification 속성을 통해 IBindingList 인터페이스에 대해 변경 알림을 사용할 수 있습니다.

    변경 유형은 ListChangedEventArgs 매개 변수의 ListChangedType 속성을 통해 설명됩니다. 그러므로 데이터 모델이 업데이트될 때마다 같은 데이터 소스에 바인딩된 다른 컨트롤과 같은 모든 종속 뷰도 업데이트됩니다. 그러나 목록 안에 포함된 개체가 변경될 경우에는 목록에 이를 알려 목록에서 ListChanged 이벤트를 발생시킬 수 있도록 해야 합니다.

    참고

    BindingList<T>IBindingList 인터페이스의 제네릭 구현을 제공합니다.

  • IBindingListView 인터페이스

    IBindingListView 인터페이스를 구현하는 클래스는 IBindingList 구현의 모든 기능 이외에 필터링 및 고급 정렬 기능도 제공합니다. 이 구현은 문자열 기반 필터링 기능과 속성 설명자 방향 쌍을 사용한 여러 열 정렬 기능을 제공합니다.

  • IEditableObject 인터페이스

    IEditableObject 인터페이스를 구현하는 클래스를 사용하면 해당 개체에 대한 변경 내용을 영구화할 시기를 제어할 수 있습니다. 이 구현은 BeginEdit, EndEditCancelEdit 메서드를 지원하며 이를 통해 개체의 변경 내용을 롤백할 수 있습니다. BeginEdit, EndEditCancelEdit 메서드의 기능 및 데이터의 변경 내용을 롤백할 수 있도록 이러한 메서드가 작동하는 방법에 관한 간단한 설명은 다음과 같습니다.

    • BeginEdit 메서드는 개체 편집 시작 시 신호를 보냅니다. 이 인터페이스를 구현하는 개체는 CancelEdit 메서드가 호출된 경우 업데이트를 무시할 수 있도록 BeginEdit 메서드 호출 후에 모든 업데이트를 저장해야 합니다. Windows Forms 데이터 바인딩 시 단일 편집 트랜잭션 범위 내에서 BeginEdit를 여러 번 호출할 수 있습니다(예: BeginEdit, BeginEdit, EndEdit). IEditableObject 구현은 BeginEdit가 이미 호출되었는지 여부를 추적하고 후속 BeginEdit 호출을 무시해야 합니다. 이 메서드를 여러 번 호출할 수 있으므로 후속 호출은 비설명적인 것이 중요합니다. 후속 BeginEdit 호출은 만들어진 업데이트를 삭제하거나 첫 번째 BeginEdit 호출에 저장된 데이터를 변경할 수 없습니다.

    • EndEdit 메서드는 BeginEdit가 호출된 후 개체가 현재 편집 모드에 있는 경우 모든 변경 내용을 기본 개체로 푸시합니다.

    • CancelEdit 메서드는 개체의 모든 변경 내용을 무시합니다.

    BeginEdit, EndEditCancelEdit 메서드의 작동 방식에 관한 자세한 내용은 데이터를 다시 데이터베이스에 저장을 참조하세요.

    데이터 기능의 이 트랜잭션 개념은 DataGridView 컨트롤에서 사용합니다.

  • ICancelAddNew 인터페이스

    ICancelAddNew 인터페이스를 구현하는 클래스는 일반적으로 IBindingList 인터페이스를 구현하며 이를 사용하면 AddNew 메서드를 통해 데이터 원본의 추가 내용을 롤백할 수 있습니다. 데이터 원본이 IBindingList 인터페이스를 구현하는 경우 이 데이터 원본으로 ICancelAddNew 인터페이스도 구현해야 합니다.

  • IDataErrorInfo 인터페이스

    IDataErrorInfo 인터페이스를 구현하는 클래스를 사용하면 개체에서 사용자 지정 오류 정보를 바인딩된 컨트롤에 제공할 수 있습니다.

    • Error 속성은 일반 오류 메시지 텍스트(예: “오류가 발생했습니다.”)를 반환합니다.

    • Item[] 속성은 열의 특정 오류 메시지를 포함하는 문자열(예: “State 열의 값이 잘못되었습니다.”)을 반환합니다.

  • IEnumerable 인터페이스

    IEnumerable 인터페이스를 구현하는 클래스는 일반적으로 ASP.NET에서 사용됩니다. 이 인터페이스에 대한 Windows Forms 지원은 BindingSource 구성 요소를 통해서만 사용할 수 있습니다.

    참고

    BindingSource 구성 요소는 바인딩을 위해 모든 IEnumerable 항목을 별도 목록으로 복사합니다.

  • ITypedList 인터페이스

    ITypedList 인터페이스를 구현하는 컬렉션 클래스는 바인딩된 컨트롤에 노출된 속성의 순서와 세트를 제어하는 기능을 제공합니다.

    참고

    GetItemProperties 메서드를 구현하고 PropertyDescriptor 배열이 null이 아닌 경우 배열의 마지막 항목은 다른 항목 목록인 목록 속성을 설명하는 속성 설명자가 됩니다.

  • ICustomTypeDescriptor 인터페이스

    ICustomTypeDescriptor 인터페이스를 구현하는 클래스는 자신에 관한 동적 정보를 제공합니다. 이 인터페이스는 ITypedList와 유사하지만 목록이 아닌 개체에 사용됩니다. 이 인터페이스는 DataRowView에서 내부 행의 스키마를 프로젝션하는 데 사용됩니다. ICustomTypeDescriptor의 단순 구현은 CustomTypeDescriptor 클래스에서 제공됩니다.

    참고

    ICustomTypeDescriptor를 구현하는 형식에 대한 디자인 타임 바인딩을 지원하려면 해당 형식은 IComponent를 구현하고 양식의 인스턴스로 존재해야 합니다.

  • IListSource 인터페이스

    IListSource 인터페이스를 구현하는 클래스를 사용하면 목록이 아닌 개체에서 목록 기반 바인딩을 수행할 수 있습니다. IListSourceGetList 메서드는 IList에서 상속되지 않는 개체의 바인딩 가능한 목록을 반환하는 데 사용됩니다.IListSourceDataSet 클래스에서 사용됩니다.

  • IRaiseItemChangedEvents 인터페이스

    IRaiseItemChangedEvents 인터페이스를 구현하는 클래스는 IBindingList 인터페이스도 구현하는 바인딩 가능한 목록입니다. 이 인터페이스는 형식이 해당 RaisesItemChangedEvents 속성을 통해 ItemChanged 형식의 ListChanged 이벤트를 발생시키는지 여부를 나타내는 데 사용됩니다.

    참고

    데이터 원본이 이전에 설명된 이벤트 변환을 나열하는 속성을 제공하고 BindingSource 구성 요소와 상호 작용하는 경우 IRaiseItemChangedEvents를 구현해야 합니다. 그렇지 않으면 BindingSource도 이벤트 변환을 나열하는 속성을 수행하여 성능이 저하됩니다.

  • ISupportInitialize 인터페이스

    ISupportInitialize 인터페이스를 구현하는 구성 요소는 속성을 설정하고 상호 종속적인 속성을 초기화하는 일괄 최적화를 활용합니다. ISupportInitialize는 다음과 같은 두 개의 메서드를 포함합니다.

    • BeginInit는 개체 초기화가 시작되고 있다는 신호를 보냅니다.

    • EndInit는 개체 초기화가 완료되고 있다는 신호를 보냅니다.

  • ISupportInitializeNotification 인터페이스

    ISupportInitializeNotification 인터페이스를 구현하는 구성 요소도 ISupportInitialize 인터페이스를 구현합니다. 이 인터페이스를 사용하면 초기화가 완료되었음을 다른 ISupportInitialize 구성 요소에 알릴 수 있습니다. ISupportInitializeNotification 인터페이스에는 다음과 같은 두 가지 멤버가 포함됩니다.

    • IsInitialized는 구성 요소가 초기화되었는지 여부를 나타내는 boolean 값을 반환합니다.

    • InitializedEndInit가 호출될 때 발생합니다.

  • INotifyPropertyChanged 인터페이스

    이 인터페이스를 구현하는 클래스는 해당 속성 값이 변경될 때 이벤트를 발생시키는 형식입니다. 이 인터페이스는 각 컨트롤 속성에서 변경 이벤트를 갖는 패턴을 바꾸는 데 사용됩니다. BindingList<T>에서 사용되는 경우 비즈니스 개체는 INotifyPropertyChanged 인터페이스를 구현해야 하며 BindingList`1은 PropertyChanged 이벤트를 ItemChanged 형식의 ListChanged 이벤트로 변환합니다.

    참고

    바인딩된 클라이언트와 데이터 원본 간 바인딩에서 변경 알림이 발생하도록 하려면, 바인딩된 데이터 원본 형식에서 INotifyPropertyChanged 인터페이스를 구현하도록 하거나(기본 설정) 바인딩된 형식에 propertyNameChanged 이벤트를 제공할 수 있습니다. 다만, 둘 다 수행할 수는 없습니다.

구성 요소 작성자가 구현할 수 있는 인터페이스

다음 인터페이스는 Windows Forms 데이터 바인딩 엔진에서 사용됩니다.

  • IBindableComponent 인터페이스

    이 인터페이스를 구현하는 클래스는 컨트롤이 아닌 구성 요소이며 데이터 바인딩을 지원합니다. 이 클래스는 이 인터페이스의 DataBindingsBindingContext 속성을 통해 구성 요소의 데이터 바인딩과 바인딩 컨텍스트를 반환합니다.

    참고

    구성 요소가 Control에서 상속되는 경우에는 IBindableComponent 인터페이스를 구현하지 않아도 됩니다.

  • ICurrencyManagerProvider 인터페이스

    ICurrencyManagerProvider 인터페이스를 구현하는 클래스는 특정 구성 요소와 연결된 바인딩을 관리하기 위해 고유한 CurrencyManager를 제공하는 구성 요소입니다. 사용자 지정 CurrencyManager에 대한 액세스는 CurrencyManager 속성을 통해 제공합니다.

    참고

    Control에서 상속되는 클래스는 해당 BindingContext 속성을 통해 자동으로 바인딩을 관리하므로, ICurrencyManagerProvider를 구현해야 하는 경우는 거의 없습니다.

Windows Forms에서 지원하는 데이터 소스

일반적으로 데이터 바인딩은 데이터베이스에 저장된 데이터를 활용하기 위해 애플리케이션 내에서 사용되었습니다. Windows Forms 데이터 바인딩을 사용하면 특정 최소 요구 사항이 충족되는 한 데이터베이스의 데이터뿐만 아니라 배열, 컬렉션 등 다른 구조체의 데이터에 액세스할 수 있습니다.

바인딩할 구조체

Windows Forms에서 단순 개체(단순 바인딩)에서 ADO.NET 데이터 테이블 등의 복잡한 목록(복합 바인딩)에 이르기까지 다양한 구조체에 바인딩할 수 있습니다. 단순 바인딩의 경우 Windows Forms는 단순 개체의 퍼블릭 속성에 대한 바인딩을 지원합니다. Windows Forms 목록 기반 바인딩을 사용하려면 일반적으로 개체가 IList 인터페이스 또는 IListSource 인터페이스를 지원해야 합니다. 또한 BindingSource 구성 요소를 통해 바인딩하는 경우 IEnumerable 인터페이스를 지원하는 개체에 바인딩할 수 있습니다.

다음 목록은 Windows Forms에서 바인딩할 수 있는 구조체를 보여 줍니다.

  • BindingSource

    BindingSource는 가장 일반적인 Windows Forms 데이터 원본이며 데이터 원본과 Windows Forms 컨트롤 간에 프록시 역할을 합니다. 일반적인 BindingSource 사용 패턴은 컨트롤을 BindingSource에 바인딩하고 BindingSource를 데이터 원본(예: ADO.NET 데이터 테이블 또는 비즈니스 개체)에 바인딩하는 것입니다. BindingSource는 해당 수준의 데이터 바인딩 지원을 가능하게 하고 개선하는 서비스를 제공합니다. 예를 들어, DataGridView, ComboBox 등의 Windows Forms 목록 기반 컨트롤은 IEnumerable 데이터 원본에 대한 바인딩을 직접 지원하지 않지만, BindingSource을(를) 통해 바인딩하면 이 시나리오를 사용할 수 있습니다. 이 경우 BindingSource는 데이터 원본을 IList로 변환합니다.

  • 단순 개체

    Windows Forms는 Binding 형식을 사용하여 컨트롤 속성을 개체 인스턴스의 퍼블릭 속성에 데이터 바인딩하는 작업을 지원합니다. Windows Forms는 BindingSource이(가) 사용될 때 개체 인스턴스에 ListControl 등의 목록 기반 컨트롤을 바인딩하는 작업도 지원합니다.

  • 배열 또는 컬렉션

    데이터 원본 역할을 하려면 목록은 IList 인터페이스를 구현해야 합니다. 한 가지 예로는 Array 클래스의 인스턴스인 배열이 있습니다. 배열에 대한 자세한 내용은 방법: 개체 배열 만들기(Visual Basic)를 참조하세요.

    일반적으로 데이터 바인딩에 대한 개체 목록을 만드는 경우 BindingList<T>를 사용해야 합니다. BindingListIBindingList 인터페이스의 일반 버전입니다. IBindingList 인터페이스는 양방향 데이터 바인딩에 필요한 속성, 메서드, 이벤트를 추가하여 IList 인터페이스를 확장합니다.

  • IEnumerable

    Windows Forms 컨트롤은 BindingSource 구성 요소를 통해 바인딩된 경우에만 IEnumerable 인터페이스를 지원하는 데이터 원본에 바인딩할 수 있습니다.

  • ADO.NET 데이터 개체

    ADO.NET은 바인딩에 적합한 많은 데이터 구조를 제공합니다. 각 구조의 정교함과 복잡성은 다양합니다.

    • DataColumn

      DataColumn은(는) 여러 열이 테이블을 구성한다는 측면에서 DataTable의 필수 구성 요소입니다. 각 DataColumn에는 열에 포함되는 데이터 종류(예: 자동차를 설명하는 테이블의 자동차 브랜드)를 결정하는 DataType 속성이 있습니다. 컨트롤(예: TextBox 컨트롤의 Text 속성)을 데이터 테이블 내의 열에 단순 바인딩할 수 있습니다.

    • DataTable

      DataTable은 ADO.NET의 행과 열이 있는 테이블 표현입니다. 데이터 테이블에 포함되는 두 가지 컬렉션은 지정된 테이블의 데이터 열을 나타내는 DataColumn 컬렉션(최종적으로 해당 테이블에 입력할 수 있는 데이터 종류 결정)과 지정된 테이블의 데이터 행을 나타내는 DataRow 컬렉션입니다. 컨트롤을 데이터 테이블에 포함된 정보에 복합 바인딩할 수 있습니다(예: 데이터 테이블에 DataGridView 컨트롤 바인딩). 그러나 DataTable에 바인딩하는 경우 실제로는 테이블의 기본 뷰에 바인딩됩니다.

    • DataView

      DataView는 필터링되거나 정렬될 수 있는 단일 데이터 테이블의 사용자 지정된 뷰입니다. 데이터 뷰는 복합 바인딩된 컨트롤에서 사용하는 데이터 “스냅샷”입니다. 데이터 뷰 내에서 데이터에 단순 바인딩하거나 복합 바인딩할 수 있지만, 정리되고 업데이트되는 데이터 원본이 아닌 고정된 데이터 “그림”에 바인딩하고 있다는 점에 유의하세요.

    • DataSet

      DataSet는 데이터베이스에 있는 데이터의 테이블, 관계 및 제약 조건의 컬렉션입니다. 데이터 세트 내 데이터에 단순 바인딩하거나 복합 바인딩할 수 있지만, DataSet의 기본 DataViewManager에 바인딩하고 있다는 점에 유의하세요(다음 글머리 기호 참조).

    • DataViewManager

      DataViewManager는 전체 DataSet의 사용자 지정된 뷰이며 DataView와 유사하지만 관계가 포함됩니다. DataViewSettings 컬렉션을 사용하면 지정된 테이블에 대해 DataViewManager에 포함된 모든 뷰의 기본 필터와 정렬 옵션을 설정할 수 있습니다.

데이터 바인딩의 형식

Windows Forms는 단순 바인딩과 복합 바인딩의 두 가지 데이터 바인딩 형식을 사용할 수 있습니다. 각 바인딩 형식은 서로 다른 이점을 제공합니다.

데이터 바인딩 형식 설명
단순 데이터 바인딩 컨트롤이 데이터 세트 테이블의 열 값과 같은 단일 데이터 요소에 바인딩하는 기능입니다. 간단한 데이터 바인딩 형식의 바인딩은 일반적으로 TextBox 컨트롤 또는 Label 컨트롤과 같이 보통 단일 값만 표시하는 컨트롤에 사용됩니다. 실제로 컨트롤의 모든 속성은 데이터베이스의 필드에 바인딩할 수 있습니다. Visual Studio에서는 이 기능을 광범위하게 지원합니다.

자세한 내용은 데이터 탐색간단한 바인딩된 컨트롤 만들기(.NET Windows Forms)를 참조하세요.
복합 데이터 바인딩 둘 이상의 데이터 요소(일반적으로 데이터베이스 내 둘 이상의 레코드)에 바인딩하는 컨트롤의 기능입니다. 복합 바인딩은 목록 기반 바인딩이라고도 합니다. 복합 바인딩을 지원하는 컨트롤의 예로는 DataGridView, ListBoxComboBox 컨트롤이 있습니다. 복잡한 데이터 바인딩의 예제는 방법: 데이터에 Windows Forms ComboBox 또는 ListBox 컨트롤 바인딩을 참조하세요.

바인딩 소스 구성 요소

Windows Forms에서는 데이터 바인딩을 간소화하기 위해 데이터 소스를 BindingSource 구성 요소에 바인딩한 다음 컨트롤을 BindingSource에 바인딩할 수 있습니다. 단순 또는 복합 바인딩 시나리오에서 BindingSource를 사용할 수 있습니다. 두 경우 모두 BindingSource는 데이터 소스와 바인딩되는 컨트롤 간의 매개 역할을 하며 변경 알림, 현재 항목 관리 및 기타 서비스를 제공합니다.

데이터 바인딩을 사용하는 일반적인 시나리오

거의 모든 상업용 애플리케이션에서는 대개 데이터 바인딩을 통해 특정 형식의 데이터 소스에서 읽은 정보를 사용합니다. 다음 목록에는 데이터 표시 및 조작 방법으로 데이터 바인딩을 사용하는 가장 일반적인 몇 가지 시나리오가 나와 있습니다.

시나리오 설명
보고 보고서를 사용하면 데이터를 인쇄된 문서에 유동적으로 표시 및 요약할 수 있습니다. 일반적으로는 데이터 소스의 선택한 콘텐츠를 화면이나 프린터에 인쇄하는 보고서를 만듭니다. 일반적인 보고서에는 목록, 송장, 요약 등이 포함됩니다. 항목은 목록의 열로 서식이 지정되며 각 목록 항목 아래에는 하위 항목이 구성되지만 데이터에 가장 적합한 레이아웃을 선택해야 합니다.
데이터 입력 일반적으로는 데이터 입력 양식을 통해 많은 양의 관련 데이터를 입력하거나 사용자에게 정보를 표시합니다. 사용자는 텍스트 상자, 옵션 단추, 드롭다운 목록 및 확인란을 사용하여 정보를 입력하거나 항목을 선택할 수 있습니다. 그러면 정보가 전송되어 데이터베이스에 저장됩니다. 이 데이터베이스의 구조는 입력된 정보를 기반으로 합니다.
마스터/세부 관계 마스터/세부 애플리케이션은 관련된 데이터를 확인하기 위한 하나의 형식입니다. 이 응용 프로그램에는 두 데이터 테이블이 관계로 연결됩니다. 기존의 비즈니스 예제에서는 "Customers" 테이블과 "Orders" 테이블 간의 관계가 고객과 해당 주문을 연결합니다. 두 개의 Windows Forms DataGridView 컨트롤을 사용하여 마스터/세부 정보 애플리케이션을 만드는 방법에 대한 자세한 내용은 방법: 두 개의 Windows Forms DataGridView 컨트롤을 사용하여 마스터/세부 폼 만들기를 참조하세요.
조회 테이블 또 다른 일반적인 데이터 표시/조작 시나리오는 테이블 조회입니다. ComboBox 컨트롤은 대규모 데이터 표시의 일부분으로 데이터를 표시하고 조작하는 경우가 많습니다. 여기서 중요한 점은, ComboBox 컨트롤에 표시되는 데이터와 데이터베이스에 기록되는 데이터가 다르다는 점입니다. 예를 들어 식료품점에서 구입할 수 있는 품목을 표시하는 ComboBox 컨트롤을 사용하는 경우에는 빵, 우유, 계란 등의 제품 이름을 표시하는 경우가 많습니다. 그러나 데이터베이스 내의 정보를 쉽게 검색하고 데이터베이스를 표준화하기 위해 지정된 주문의 특정 품목 정보를 #501, #603 등의 품목 번호로 저장할 수 있습니다. 이처럼 폼에 있는 ComboBox 컨트롤의 식료품 "이름"과 주문에 포함된 관련 항목 번호 간에는 암시적 연결이 설정됩니다. 이러한 연결이 테이블 조회의 핵심 요소입니다. 자세한 내용은 방법: Windows Forms BindingSource 구성 요소를 사용하여 조회 테이블 만들기를 참조하세요.

참고 항목