Show / Hide Table of Contents

Практическое руководство. Привязка к источнику данных 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 и красное, в противном случае. Здесь не приведена реализация преобразователя.

См. также

  • BindingListCollectionView
  • Общие сведения о привязке данных
  • Разделы практического руководства
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX