次の方法で共有


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

更新 : 2007 年 11 月

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

使用例

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

これで、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 未満の場合は緑で、それ以外の場合は赤で表示されます。コンバータの実装は、ここでは示されていません。サンプル全体については、「ADO.NET DataSet のデータとのバインディングのサンプル」を参照してください。

参照

概念

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

参照

BindingListCollectionView

その他の技術情報

データ バインディングのサンプル

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