다음을 통해 공유


방법: ADO.NET 데이터 소스 바인딩

이 예제에서는 Windows Presentation Foundation (WPF) ListBox 컨트롤을 ADO.NET DataSet에 바인딩하는 방법을 보여 줍니다.

예제

이 예제에서는 연결 문자열에 지정된 Access MDB 파일인 데이터 소스에 연결하는 데 OleDbConnection 개체가 사용됩니다. 연결이 설정되면 OleDbDataAdpater 개체가 만들어집니다. OleDbDataAdpater 개체는 Select Structured Query Language (SQL) 문을 실행하여 데이터베이스에서 레코드 집합을 검색합니다. SQL 명령의 결과는 OleDbDataAdapter의 Fill 메서드를 호출하여 DataSet의 DataTable에 저장됩니다. 이 예제에서 DataTable의 이름은 BookTable로 지정됩니다. 그런 다음 이 예제에서는 ListBoxDataContext 속성을 DataSet 개체로 설정합니다.

    Private myDataSet As DataSet

    Private Sub OnInit(ByVal sender As Object, ByVal e As EventArgs)
      Dim mdbFile As String = Path.Combine(AppDataPath, "BookData.mdb")
      Dim connString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", mdbFile)
      Dim conn As New OleDbConnection(connString)
      Dim adapter As New OleDbDataAdapter("SELECT * FROM BookTable;", conn)

      myDataSet = New DataSet()
      adapter.Fill(myDataSet, "BookTable")

      ' myListBox is a ListBox control.
      ' Set the DataContext of the ListBox to myDataSet
      myListBox.DataContext = myDataSet
    End Sub
DataSet myDataSet;

private void OnInit(object sender, EventArgs e)
{
  string mdbFile = Path.Combine(AppDataPath, "BookData.mdb");
  string connString = string.Format(
      "Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", mdbFile);
  OleDbConnection conn = new OleDbConnection(connString);
  OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM BookTable;", conn);

  myDataSet = new DataSet();
  adapter.Fill(myDataSet, "BookTable");

  // myListBox is a ListBox control.
  // Set the DataContext of the ListBox to myDataSet
  myListBox.DataContext = myDataSet;
}

그러면 ListBoxItemsSource 속성을 DataSet의 BookTable에 바인딩할 수 있습니다.

<ListBox Name="myListBox" Height="200"
  ItemsSource="{Binding Path=BookTable}"
  ItemTemplate  ="{StaticResource BookItemTemplate}"/>

BookItemTemplate은 데이터가 나타나는 방식을 정의하는 DataTemplate입니다.

<StackPanel.Resources>
  <c:IntColorConverter x:Key="MyConverter"/>

  <DataTemplate x:Key="BookItemTemplate">
    <Grid>
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="250" />
        <ColumnDefinition Width="100" />
        <ColumnDefinition Width="*"/>
      </Grid.ColumnDefinitions>
      <TextBlock Text="{Binding Path=Title}" Grid.Column="0"
        FontWeight="Bold" />
      <TextBlock Text="{Binding Path=ISBN}" Grid.Column="1" />
      <TextBlock Grid.Column="2" Text="{Binding Path=NumPages}"
                 Background="{Binding Path=NumPages,
          Converter={StaticResource MyConverter}}"/>
    </Grid>
  </DataTemplate>
</StackPanel.Resources>

IntColorConverter는 int를 색으로 변환합니다. 이 변환기를 사용할 경우 NumPages의 값이 350 미만이면 세 번째 TextBlockBackground 색이 녹색으로 나타나고 그렇지 않으면 빨간색으로 나타납니다. 여기에서는 변환기의 구현을 보여 주지 않습니다.

참고 항목

참조

BindingListCollectionView

개념

데이터 바인딩 개요

기타 리소스

데이터 바인딩 방법 항목