Freigeben über


Vorgehensweise: Binden an eine ADO.NET Datenquelle

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

Beispiel

In diesem Beispiel wird ein OleDbConnection-Objekt verwendet, um eine Verbindung mit der Datenquelle herzustellen, bei der es sich um eine Access MDB Datei handelt, die in der Verbindungszeichenfolge angegeben ist. Nachdem die Verbindung hergestellt wurde, wird ein OleDbDataAdapter-Objekt erstellt. Das OleDbDataAdapter-Objekt führt eine SQL-Anweisung 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 auf 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

Anschließend können wir die Eigenschaft ItemsSource des ListBox an die BookTable des DataSetverknüpfen:

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

BookItemTemplate ist die DataTemplate, die 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 angezeigt.

Weitere Informationen