방법: ADO.NET 데이터 소스 바인딩
업데이트: 2007년 11월
이 예제에서는 WPF(Windows Presentation Foundation)ListBox 컨트롤을 ADO.NETDataSet에 바인딩하는 방법을 보여 줍니다.
예제
이 예제에서는 연결 문자열에 지정된 Access MDB 파일인 데이터 소스에 연결하는 데 OleDbConnection 개체가 사용됩니다. 연결이 설정되면 OleDbDataAdpater 개체가 만들어집니다. OleDbDataAdpater 개체는 Select SQL(구조적 쿼리 언어) 문을 실행하여 데이터베이스에서 레코드 집합을 검색합니다. SQL 명령의 결과는 OleDbDataAdapter의 Fill 메서드를 호출하여 DataSet의 DataTable에 저장됩니다. 이 예제에서 DataTable의 이름은 BookTable로 지정됩니다. 그런 다음 이 예제에서는 ListBox의 DataContext 속성을 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;
}
그러면 ListBox의 ItemsSource 속성을 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 미만이면 세 번째 TextBlock의 Background 색이 녹색으로 나타나고 그렇지 않으면 빨간색으로 나타납니다. 여기에서는 변환기의 구현을 보여 주지 않습니다. 전체 샘플을 보려면 ADO.NET 데이터 집합 바인딩 샘플을 참조하십시오.