다음을 통해 공유


조회 데이터 바인딩을 지원하는 .NET Framework Windows Forms 사용자 컨트롤 만들기

비고

클래스 및 관련 클래스는 DataSet 2000년대 초반의 레거시 .NET Framework 기술로, 애플리케이션이 데이터베이스와 연결이 끊긴 동안 애플리케이션이 메모리의 데이터로 작업할 수 있도록 합니다. 이 기술은 사용자가 데이터를 수정하고 변경 내용을 데이터베이스에 다시 유지할 수 있도록 하는 앱에 특히 유용합니다. 데이터 세트는 입증된 성공적인 기술이지만 새 .NET 애플리케이션에 권장되는 방법은 Entity Framework Core를 사용하는 것입니다. Entity Framework는 테이블 형식 데이터를 개체 모델로 사용하는 보다 자연스러운 방법을 제공하며 더 간단한 프로그래밍 인터페이스를 제공합니다.

Windows Forms에 데이터를 표시할 때 도구 상자에서 기존 컨트롤을 선택하거나 애플리케이션에 표준 컨트롤에서 사용할 수 없는 기능이 필요한 경우 사용자 지정 컨트롤을 작성할 수 있습니다. 이 연습에서는 LookupBindingPropertiesAttribute을 구현하는 컨트롤을 만드는 방법을 설명합니다. 구현 LookupBindingPropertiesAttribute 하는 컨트롤에는 데이터에 바인딩할 수 있는 세 가지 속성이 포함될 수 있습니다. 이러한 컨트롤은 ComboBox와 비슷합니다.

컨트롤 작성에 대한 자세한 내용은 디자인 타임에 Windows Forms 컨트롤 개발을 참조하세요.

데이터 바인딩 시나리오에서 사용할 컨트롤을 작성할 때 다음 데이터 바인딩 특성 중 하나를 구현해야 합니다.

데이터 바인딩 특성 사용
단일 열(또는 속성)의 데이터를 표시하는 TextBox와 같은 간단한 컨트롤에서 DefaultBindingPropertyAttribute를 구현합니다. 자세한 내용은 간단한 데이터 바인딩을 지원하는 Windows Forms 사용자 컨트롤 만들기를 참조하세요.
ComplexBindingPropertiesAttribute을(를) 데이터의 목록(또는 테이블)을 표시하는 DataGridView와 같은 컨트롤에 구현합니다. 자세한 내용은 복잡한 데이터 바인딩을 지원하는 Windows Forms 사용자 컨트롤 만들기를 참조하세요.
LookupBindingPropertiesAttribute과 같은 데이터를 목록(또는 테이블) 형태로 표시하지만 단일 열이나 속성도 표시해야 하는 컨트롤에 구현합니다. (이 프로세스는 이 연습 페이지에 설명되어 있습니다.)

이 워크스루에서는 두 테이블의 데이터에 바인딩하는 조회 컨트롤을 만듭니다. 이 예제에서는 Northwind 샘플 데이터베이스의 Customers 테이블과 Orders 테이블을 사용합니다. 조회 컨트롤은 Orders 테이블의 CustomerID 필드에 바인딩됩니다. 이 값을 사용하여 CompanyNameCustomers 테이블에서 조회합니다.

이 학습 과정을 통해 다음을 수행하는 방법을 배우게 됩니다.

  • Windows Forms 앱(.NET Framework)을 만듭니다.

  • 프로젝트에 새 사용자 컨트롤 을 추가합니다.

  • 사용자 컨트롤을 시각적으로 디자인합니다.

  • LookupBindingProperty 특성을 구현합니다.

  • 데이터 원본 구성 마법사를 사용하여 데이터 세트를 만듭니다.

  • 새 컨트롤을 사용하도록 주문 테이블의 데이터 원본 창에서 CustomerID 열을 설정합니다.

  • 새 컨트롤에 데이터를 표시하는 양식을 만듭니다.

필수 조건

이 자습서를 완료하려면 Visual Studio에 설치된 .NET 데스크톱 개발및 데이터 스토리지 및 처리 워크로드가 필요합니다. 설치하려면 Visual Studio 설치 관리자 열고 수정하려는 Visual Studio 버전 옆에 있는 수정(또는 추가>수정)을 선택합니다. 을(를) 참조하여 Visual Studio을(를) 수정하세요.

이 연습에서는 SQL Server Express LocalDB 및 Northwind 샘플 데이터베이스를 사용합니다.

  1. SQL Server Express LocalDB가 없는 경우 SQL Server Express 다운로드 페이지 또는 Visual Studio 설치 관리자를 통해 설치합니다. Visual Studio 인스톨러에서 SQL Server Express LocalDB를 데이터 저장 및 처리 워크로드의 일부로 또는 개별 구성 요소로 설치할 수 있습니다.

  2. 다음 단계에 따라 Northwind 샘플 데이터베이스를 설치합니다.

    1. Visual Studio에서 SQL Server 개체 탐색기 창을 엽니다. (SQL Server 개체 탐색기는 Visual Studio 설치 관리자에서 데이터 스토리지 및 처리 워크로드의 일부로 설치됩니다.) SQL Server 노드를 확장합니다. LocalDB 인스턴스를 마우스 오른쪽 단추로 클릭하고 새 쿼리 선택합니다.

      쿼리 편집기 창이 열립니다.

    2. Northwind Transact-SQL 스크립트를 클립보드에 복사합니다. 이 T-SQL 스크립트는 Northwind 데이터베이스를 처음부터 만들고 데이터로 채웁니다.

    3. T-SQL 스크립트를 쿼리 편집기에 붙여넣은 다음 실행 단추를 선택합니다.

      잠시 후 쿼리 실행이 완료되고 Northwind 데이터베이스가 만들어집니다.

Windows Forms 앱 프로젝트 만들기

첫 번째 단계는 Windows Forms 앱(.NET Framework) 프로젝트를 만드는 것입니다.

  1. Visual Studio의 파일 메뉴에서 >프로젝트를 선택합니다.

  2. 왼쪽 창에서 Visual C# 또는 Visual Basic 을 확장한 다음 , Windows Desktop을 선택합니다.

  3. 가운데 창에서 Windows Forms 앱 프로젝트 유형을 선택합니다.

  4. 프로젝트 이름을 LookupControlWalkthrough으로 지정한 후 확인을 선택합니다.

    LookupControlWalkthrough 프로젝트가 만들어지고 솔루션 탐색기에 추가됩니다.

프로젝트에 사용자 컨트롤 추가

이 연습에서는 사용자 컨트롤에서 조회 컨트롤을 만들므로 LookupControlWalkthrough 프로젝트에 사용자 컨트롤 항목을 추가합니다.

  1. 프로젝트 메뉴에서 사용자 컨트롤 추가를 선택합니다.

  2. 이름 영역을 입력 LookupBox 한 다음 추가를 선택합니다.

    LookupBox 컨트롤이 솔루션 탐색기에 추가되고 디자이너에서 열립니다.

LookupBox 컨트롤 디자인

LookupBox 컨트롤을 디자인하려면 도구 상자에서 ComboBox를 사용자 컨트롤의 디자인 화면으로 드래그 앤 드롭하세요.

필요한 데이터 바인딩 특성 추가

데이터 바인딩 LookupBindingPropertiesAttribute을 지원하는 조회 컨트롤의 경우, LookupBindingPropertiesAttribute을 구현할 수 있습니다.

  1. LookupBox 컨트롤을 코드 보기로 전환합니다. ( 보기 메뉴에서 코드를 선택합니다.)

  2. 코드를 LookupBox 다음으로 바꿉다.

    using System.Windows.Forms;
    
    namespace CS
    {
        [System.ComponentModel.LookupBindingProperties("DataSource", "DisplayMember", "ValueMember", "LookupMember")]
        public partial class LookupBox : UserControl
        {
            public object DataSource
            {
                get{ return comboBox1.DataSource; }
                set{ comboBox1.DataSource = value; }
            }
    
            public string DisplayMember
            {
                get{ return comboBox1.DisplayMember; }
                set{ comboBox1.DisplayMember = value; }
            }
    
            public string ValueMember
            {
                get{ return comboBox1.ValueMember; }
                set{ comboBox1.ValueMember = value; }
            }
    
            public string LookupMember
            {
                get{ return comboBox1.SelectedValue.ToString(); }
                set{ comboBox1.SelectedValue = value; }
            }
    
    
            public LookupBox()
            {
                InitializeComponent();
            }
        }
    }
    
  3. 빌드 메뉴에서 솔루션 빌드를 선택합니다.

데이터베이스에서 데이터 원본 만들기

이 단계에서는 Northwind 샘플 데이터베이스의 테이블 및 Orders 테이블에 따라 Customers데이터 원본 구성 마법사를 사용하여 데이터 원본을 만듭니다.

  1. 데이터 원본 창을 열려면 데이터 메뉴에서 데이터 원본 표시를 클릭합니다.

  2. 데이터 원본 창에서 새 데이터 원본 추가를 선택하여 데이터 원본 구성 마법사를 시작합니다.

  3. 데이터 원본 형식 선택 페이지에서 데이터베이스 선택한 다음 선택합니다.

  4. 데이터 연결 선택 페이지에서 다음 중 하나를 수행합니다.

    • Northwind 샘플 데이터베이스에 대한 데이터 연결을 드롭다운 목록에서 사용할 수 있는 경우 선택합니다.

    • 새 연결을 선택하여 연결 추가/수정 대화 상자를 시작합니다.

  5. 데이터베이스에 암호가 필요한 경우 중요한 데이터를 포함하는 옵션을 선택하고 다음을 선택합니다.

  6. 애플리케이션 구성 파일 페이지에 연결 문자열 저장 페이지에서 다음을 클릭합니다.

  7. 데이터베이스 개체 선택 페이지에서 테이블 노드를 확장합니다.

  8. Customers 테이블과 Orders 테이블을 선택한 다음, 마침을 선택합니다.

    NorthwindDataSet이 프로젝트에 추가되고 Customers 테이블과 Orders 테이블이 데이터 원본 창에 표시됩니다.

LookupBox 컨트롤을 사용하도록 Orders 테이블의 CustomerID 열 설정

데이터 원본 창 내에서 항목을 폼으로 끌어다 놓기 전에 만들 컨트롤을 설정할 수 있습니다.

  1. 디자이너에서 Form1을 엽니다.

  2. 데이터 원본 창에서 고객 노드를 확장합니다.

  3. 주문 노드를 확장합니다. 이는 팩스 열 아래 고객 노드에 있는 노드입니다.

  4. 주문 노드에서 드롭다운 목록 화살표를 클릭하고 컨트롤 목록에서 세부 정보를 선택합니다.

  5. 주문 노드의 CustomerID 열에서 드롭다운 목록 화살표 클릭하고 사용자 지정을 선택합니다.

  6. 데이터 UI 사용자 지정 옵션 대화 상자의 연결된 컨트롤 목록에서 LookupBox를 선택합니다.

  7. OK를 클릭합니다.

  8. CustomerID 열에서 드롭다운 목록 화살표를 클릭하고 LookupBox를 선택합니다.

양식에 컨트롤 추가

데이터 원본 창에서 Form1로 항목을 끌어 데이터 바인딩된 컨트롤을 만들 수 있습니다.

Windows Form에서 데이터 바인딩된 컨트롤을 만들려면 데이터 원본 창에서 Windows Form으로 주문 노드를 끌어서 LookupBox 컨트롤이 열에 CustomerID 데이터를 표시하는 데 사용되는지 확인합니다.

Customers 테이블에서 CompanyName을 조회하도록 컨트롤을 바인딩하세요.

조회 바인딩을 설정하려면 데이터 원본 창에서 기본 고객 노드를 선택하고 Form1CustomerIDLookupBox에 있는 콤보 상자로 끕니다.

이렇게 하면 Customers 테이블의 CompanyName를 표시하는 데이터 바인딩이 설정되며, Orders 테이블의 CustomerID 값을 유지합니다.

애플리케이션 실행

  • F5 눌러 애플리케이션을 실행합니다.

  • 일부 레코드를 탐색하고 LookupBox 컨트롤에 CompanyName가 표시되는지 확인합니다.