Практическое руководство. Привязка к источнику данных ADO.NET
В этом примере показано, как привязать Windows Presentation Foundation (WPF) ListBox управления ADO.NET DataSet
.
Пример
В этом примере объект OleDbConnection
используется для подключения к источнику данных, который представляет собой файл Access MDB
, указанный в строке подключения. После установления соединения создается объект OleDbDataAdapter
. Объект OleDbDataAdapter
выполняет запрос select Язык SQL (Structured Query Language) для извлечения набора записей из базы данных. Результаты выполнения команды SQL-код хранятся в DataTable
элементе DataSet
путем вызова метода Fill
класса OleDbDataAdapter
. DataTable
в этом примере назван BookTable
. Задается DataContext свойство ListBox для 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;
}
Мы можем затем привязать ItemsSource свойство ListBox для BookTable
из DataSet
:
<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
в цвет. С помощью этого преобразователя Background цвет третьего TextBlock отображается зеленым Если значение NumPages
является менее 350 и красное, в противном случае. Здесь не приведена реализация преобразователя.