方法 : ADO.NET データ ソースにバインドする

この例では、Windows Presentation Foundation (WPF) ListBox コントロールを ADO.NET DataSet にバインドする方法を示します。

使用例

ここでは、データ ソース (接続文字列で指定された Access MDB ファイル) に接続するために、OleDbConnection オブジェクトを使用します。 接続が確立されると、その後、OleDbDataAdpater オブジェクトが作成されます。 OleDbDataAdpater オブジェクトは、select Structured Query Language (SQL) ステートメントを使用して、データベースからレコードセットを取得します。 SQL コマンドの結果は、 OleDbDataAdapter の Fill メソッドを呼び出して、DataSet の DataTable に格納されます。 この例の DataTable には、BookTable という名前が付いています。 また、この例では、ListBoxDataContext プロパティを DataSet オブジェクトに設定します。

    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
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;
}

これで、ListBoxItemsSource プロパティを、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 を 1 つの色に変換します。 このコンバーターを使用すると、3 つ目の TextBlockBackground の色は、NumPages の値が 350 未満の場合は緑で、それ以外の場合は赤で表示されます。 コンバーターの実装は、ここでは示されていません。

参照

参照

BindingListCollectionView

概念

データ バインディングの概要

その他の技術情報

データ バインディングに関する「方法」トピック