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

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

예제

이 예에서는 OleDbConnection 개체를 사용하여 연결 문자열에 지정된 Access MDB 파일인 데이터 소스에 연결합니다. 연결이 설정되고 나면 OleDbDataAdapter 개체가 생성됩니다. OleDbDataAdapter 개체는 select SQL(구조적 언어 쿼리) 명령문을 실행하여 데이터베이스에서 레코드 집합을 검색합니다. SQL 명령의 결과는 OleDbDataAdapterFill 메서드를 호출하여 DataSetDataTable에 저장됩니다. 이 예에서 DataTableBookTable로 이름이 지정됩니다. 그런 다음, 예제에서 ListBoxDataContext 속성을 DataSet 개체로 설정합니다.

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;
}
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

그런 다음, ListBoxItemsSource 속성을 DataSetBookTable로 바인딩할 수 있습니다.

<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>

IntColorConverterint를 색상으로 변환합니다. 이 변환기를 사용하면 NumPages 값이 350보다 작은 경우 세 번째 TextBlockBackground 색은 녹색으로 표시되고 그렇지 않으면 빨간색으로 표시됩니다. 변환기의 구현은 여기에 표시되지 않습니다.

참고 항목