Gewusst wie: Binden an eine ADO.NET-Datenquelle

In diesem Beispiel wird gezeigt, wie ein Windows Presentation Foundation (WPF) ListBox-Steuerelement an ein ADO.NET DataSetgebunden wird.

Beispiel

In diesem Beispiel wird ein OleDbConnection-Objekt zum Herstellen der Verbindung mit der Datenquelle verwendet, die als Access MDB-Datei in der Verbindungszeichenfolge angegeben ist. Nach dem Herstellen der Verbindung wird ein OleDbDataAdapter-Objekt erstellt. Das OleDbDataAdapter-Objekt führt eine SQL-Anweisung des Typs Structured Query Language (SQL) aus, um das Recordset aus der Datenbank abzurufen. Die Ergebnisse des SQL-Befehls werden in einer DataTable für das DataSet gespeichert, indem die Fill-Methode von OleDbDataAdapter aufgerufen wird. Die DataTable in diesem Beispiel heißt BookTable. Im Beispiel wird dann die DataContext-Eigenschaft des ListBox für das DataSet-Objekt festgelegt.

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

Dann können wir die ItemsSource-Eigenschaft der ListBox an die BookTable von DataSetbinden:

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

BookItemTemplate ist das DataTemplate, das definiert, wie die Daten angezeigt werden:

<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 konvertiert int in eine Farbe. Mit Hilfe dieses Konverters erscheint die Background-Farbe des dritten TextBlock grün, wenn der Wert von NumPages kleiner als 350 ist, und ansonsten rot. Die Implementierung des Konverters wird hier nicht gezeigt.

Weitere Informationen