다음을 통해 공유


.NET Framework 애플리케이션의 데이터 세트에 WPF 컨트롤 바인딩

비고

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

이 연습에서는 데이터 바인딩된 컨트롤을 포함하는 WPF 애플리케이션을 만듭니다. 컨트롤은 데이터 세트에 캡슐화된 제품 레코드에 바인딩됩니다. 또한 단추를 추가하여 제품을 탐색하고 제품 레코드에 변경 내용을 저장합니다.

이 단계별 설명에서는 다음 작업을 설명합니다.

  • AdventureWorksLT 샘플 데이터베이스의 데이터에서 생성되는 WPF 애플리케이션 및 데이터 세트를 만듭니다.

  • 데이터 원본 창에서 WPF 디자이너의 창으로 데이터 테이블을 끌어 데이터 바인딩된 컨트롤 집합을 만듭니다.

  • 제품 레코드를 앞뒤로 탐색하는 단추를 만듭니다.

  • 사용자가 제품 레코드에 대한 변경 내용을 데이터 테이블 및 기본 데이터 원본에 저장하는 단추를 만듭니다.

비고

이 문서의 지침은 Visual Studio에서 사용할 수 있는 IDE(대화형 개발 환경)의 최신 버전을 보여 줍니다. 컴퓨터에 일부 사용자 인터페이스 요소에 대한 다른 이름 또는 위치가 표시될 수 있습니다. 다른 버전의 Visual Studio 또는 다른 환경 설정을 사용할 수 있습니다. 자세한 내용은 IDE 개인 설정참조하세요.

필수 조건

이 연습을 완료하려면 다음 구성 요소가 필요합니다.

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

  • AdventureWorks Light(AdventureWorksLT) 샘플 데이터베이스가 연결된 SQL Server 또는 SQL Server Express의 실행 중인 인스턴스에 접근합니다. 데이터베이스를 다운로드하려면 AdventureWorks 샘플 데이터베이스를 참조하세요.

다음 개념에 대한 사전 지식도 유용하지만 연습을 완료할 필요는 없습니다.

프로젝트를 만듭니다.

제품 레코드를 표시하는 새 WPF 프로젝트를 만듭니다.

  1. Visual Studio를 엽니다.

  2. 시작 창에서 새 프로젝트 만들기을 선택합니다.

  3. C# WPF 앱 프로젝트 템플릿을 검색하고 프로젝트를 만드는 단계에 따라 프로젝트 AdventureWorksProductsEditor의 이름을 지정합니다.

    Visual Studio는 AdventureWorksProductsEditor 프로젝트를 만듭니다.

애플리케이션에 대한 데이터 세트 만들기

데이터 바인딩된 컨트롤을 만들려면 먼저 애플리케이션에 대한 데이터 모델을 정의하고 데이터 원본 창에 추가해야 합니다. 이 연습에서는 데이터 모델로 사용할 데이터 세트를 만듭니다.

  1. 데이터 메뉴에서 데이터 원본 표시를 클릭합니다.

    데이터 원본 창이 열립니다.

  2. 데이터 원본 창에서 새 데이터 원본 추가클릭합니다.

    데이터 원본 구성 마법사가 열립니다.

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

  4. 데이터베이스 모델 선택 페이지에서 데이터 세트를 선택한 다음, 다음을 선택합니다.

  5. 데이터 연결 선택 페이지에서 다음 옵션 중 하나를 선택합니다.

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

    • 새 연결을 클릭하고 AdventureWorksLT 데이터베이스에 대한 연결을 만듭니다.

  6. 애플리케이션 구성 파일에 연결 문자열 저장 페이지에서 예, 연결을 다음으로 저장 확인란을 선택하고, 다음을 선택합니다.

  7. 데이터베이스 개체 선택 페이지에서 테이블을 확장한 다음 제품(SalesLT) 테이블을 선택합니다.

  8. 완료를 클릭합니다.

    Visual Studio는 프로젝트에 새 AdventureWorksLTDataSet.xsd 파일을 추가하고 해당 AdventureWorksLTDataSet 항목을 데이터 원본 창에 추가합니다. 이 파일은 AdventureWorksLTDataSet.xsd 명명된 형식화된 데이터 세트와 이름이 AdventureWorksLTDataSetProductTableAdapterTableAdapter를 정의합니다. 이 연습의 뒷부분에서는 ProductTableAdapter를 사용하여 데이터 세트를 데이터로 채우고, 변경 사항을 데이터베이스에 다시 저장하게 됩니다.

  9. 프로젝트를 빌드합니다.

TableAdapter의 기본 채우기 메서드 편집

데이터 세트를 데이터로 채우려면 .의 메서드를 FillProductTableAdapter사용합니다. 기본적으로 Fill 메서드는 Product 테이블의 모든 데이터 행으로 AdventureWorksLTDataSetProductDataTable을 채웁니다. 행의 하위 집합만 반환하도록 이 메서드를 수정할 수 있습니다. 이 예제에서는 사진이 있는 제품의 행만 반환하도록 메서드 Fill를 수정합니다.

  1. 솔루션 탐색기에서 AdventureWorksLTDataSet.xsd 파일을 두 번 클릭합니다.

    데이터 세트 디자이너가 열립니다.

  2. 디자이너에서 Fill, GetData() 쿼리를 마우스 오른쪽 단추로 클릭하고 구성을 선택합니다.

    TableAdapter 구성 마법사가 열립니다.

  3. SQL 문 입력 페이지에서 텍스트 상자의 문 다음에 SELECT 다음 WHERE 절을 추가합니다.

    WHERE ThumbnailPhotoFileName <> 'no_image_available_small.gif'
    
  4. 완료를 클릭합니다.

사용자 인터페이스 정의

WPF 디자이너에서 XAML을 수정하여 창에 여러 단추를 추가합니다. 이 연습의 뒷부분에서는 사용자가 이러한 단추를 사용하여 제품 레코드를 스크롤하고 변경 내용을 저장할 수 있는 코드를 추가합니다.

  1. 솔루션 탐색기에서 MainWindow.xaml을 두 번 클릭합니다.

    WPF 디자이너에서 창이 열립니다.

  2. 디자이너의 XAML 보기에서 태그 사이에 <Grid> 다음 코드를 추가합니다.

    <Grid.RowDefinitions>
        <RowDefinition Height="75" />
        <RowDefinition Height="625" />
    </Grid.RowDefinitions>
    <Button HorizontalAlignment="Left" Margin="22,20,0,24" Name="backButton" Width="75">&lt;</Button>
    <Button HorizontalAlignment="Left" Margin="116,20,0,24" Name="nextButton" Width="75">&gt;</Button>
    <Button HorizontalAlignment="Right" Margin="0,21,46,24" Name="saveButton" Width="110">Save changes</Button>
    
  3. 프로젝트를 빌드합니다.

데이터 바인딩된 컨트롤 만들기

데이터 원본 창에서 WPF 디자이너로 Product 테이블을 끌어 고객 레코드를 표시하는 컨트롤을 만듭니다.

  1. 데이터 원본 창에서 제품 노드의 드롭다운 목록 메뉴를 클릭하고 세부 정보를 선택합니다.

  2. 제품 노드를 확장합니다.

  3. 이 예제에서는 일부 필드가 표시되지 않으므로 다음 노드 옆에 있는 드롭다운 목록 메뉴를 클릭하고 [없음]을 선택합니다.

    • 제품카테고리ID

    • ProductModelID

    • 썸네일사진파일이름

    • rowguid

    • 수정된 날짜

  4. ThumbNailPhoto 노드 옆의 드롭다운 목록 메뉴를 클릭하고 이미지를 선택합니다.

    비고

    기본적으로 그림을 나타내는 데이터 원본 창의 항목에는 기본 컨트롤이 없음으로 설정됩니다. 이는 그림이 데이터베이스에 바이트 배열로 저장되고 바이트 배열에 간단한 바이트 배열부터 큰 애플리케이션의 실행 파일까지 무엇이든 포함할 수 있기 때문입니다.

  5. 데이터 원본 창에서 Product 노드를 단추가 포함된 행 아래의 표 행으로 끕니다.

    Visual Studio는 Products 테이블의 데이터에 바인딩된 컨트롤 집합을 정의하는 XAML을 생성합니다. 또한 데이터를 로드하는 코드를 생성합니다. 생성된 XAML 및 코드에 대한 자세한 내용은 Visual Studio의 데이터에 WPF 컨트롤 바인딩을 참조하세요.

  6. 디자이너에서 제품 ID 레이블 옆에 있는 텍스트 상자를 클릭합니다.

  7. 속성 창에서 IsReadOnly 속성 옆에 있는 확인란을 선택합니다.

사용자가 <> 단추를 사용하여 제품 레코드를 스크롤할 수 있도록 하는 코드를 추가합니다.

  1. 디자이너에서 창 화면의 < 단추를 두 번 클릭합니다.

    Visual Studio는 코드 뒤 파일을 열고 Click 이벤트에 대한 새로운 backButton_Click 이벤트 처리기를 만듭니다.

  2. Window_Loaded 이벤트 처리기를 수정하여 ProductViewSource, AdventureWorksLTDataSet, 및 AdventureWorksLTDataSetProductTableAdapter가 메서드 외부에 위치하고 전체 양식에서 액세스할 수 있도록 합니다. 이 형식만 폼에서 전역 변수로 선언하고, 다음과 유사한 방법으로 Window_Loaded 이벤트 처리기 내에서 할당합니다.

    private AdventureWorksProductsEditor.AdventureWorksLTDataSet AdventureWorksLTDataSet;
    private AdventureWorksProductsEditor.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter adventureWorksLTDataSetProductTableAdapter;
    private System.Windows.Data.CollectionViewSource productViewSource;
    
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        AdventureWorksLTDataSet = ((AdventureWorksProductsEditor.AdventureWorksLTDataSet)(this.FindResource("adventureWorksLTDataSet")));
        // Load data into the table Product. You can modify this code as needed.
        adventureWorksLTDataSetProductTableAdapter = new AdventureWorksProductsEditor.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter();
        adventureWorksLTDataSetProductTableAdapter.Fill(AdventureWorksLTDataSet.Product);
        productViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("productViewSource")));
        productViewSource.View.MoveCurrentToFirst();
    }
    
  3. 이벤트 처리기에 다음 코드를 backButton_Click 추가합니다.

    if (productViewSource.View.CurrentPosition > 0)
    {
        productViewSource.View.MoveCurrentToPrevious();
    }
    
  4. 디자이너로 돌아가서 > 단추를 두 번 클릭하십시오.

  5. 이벤트 처리기에 다음 코드를 nextButton_Click 추가합니다.

    if (productViewSource.View.CurrentPosition < ((CollectionView)productViewSource.View).Count - 1)
    {
        productViewSource.View.MoveCurrentToNext();
    }
    

제품 레코드 변경 내용 저장

변경 내용 저장 단추를 사용하여 사용자가 제품 레코드에 대한 변경 내용을 저장할 수 있도록 하는 코드를 추가합니다.

  1. 디자이너에서 변경 내용 저장 단추를 두 번 클릭합니다.

    Visual Studio에서 코드 숨김 파일을 열고 saveButton_Click 이벤트에 대한 새로운 Click 이벤트 처리기를 만듭니다.

  2. 이벤트 처리기에 다음 코드를 saveButton_Click 추가합니다.

    adventureWorksLTDataSetProductTableAdapter.Update(AdventureWorksLTDataSet.Product);
    

    비고

    이 예제에서는 Save 메서드를 TableAdapter에 사용하여 변경 내용을 저장합니다. 이 워크스루에서는 하나의 데이터 테이블만 변경되기 때문에 적합합니다. 여러 데이터 테이블에 변경 내용을 저장해야 하는 경우 Visual Studio에서 UpdateAll 데이터 세트와 함께 생성하는 메서드 TableAdapterManager 를 사용할 수도 있습니다. 자세한 내용은 TableAdapters를 참조하세요.

애플리케이션 테스트

애플리케이션을 빌드하고 실행합니다. 제품 레코드를 보고 업데이트할 수 있는지 확인합니다.

  1. F5키를 누릅니다.

    애플리케이션이 빌드되고 실행됩니다. 다음을 확인합니다.

    • 텍스트 상자에는 사진이 있는 첫 번째 제품 레코드의 데이터가 표시됩니다. 이 제품에는 제품 ID 713과 이름 Long-Sleeve 로고 저지, S 가 있습니다.

    • > 또는 < 단추를 클릭하여 다른 제품 레코드를 탐색할 수 있습니다.

  2. 제품 레코드 중 하나에서 크기 값을 변경한 다음 변경 내용 저장을 선택합니다.

  3. 애플리케이션을 닫은 다음 Visual Studio에서 F5 키를 눌러 애플리케이션을 다시 시작합니다.

  4. 변경한 제품 레코드로 이동하여 변경 내용이 유지되었는지 확인합니다.

  5. 애플리케이션을 닫습니다.

다음 단계

이 연습을 완료한 후 다음과 같은 관련 작업을 시도할 수 있습니다.