次の方法で共有


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

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

この例では、OleDbConnection オブジェクトを使用して、接続文字列で指定された Access MDB ファイルであるデータ ソースに接続します。 接続が確立されると、OleDbDataAdapter オブジェクトが作成されます。 OleDbDataAdapter オブジェクトは、select Structured Query Language (SQL) ステートメントを実行して、データベースからレコードセットを取得します。 SQL コマンドの結果は、OleDbDataAdapterFill メソッドを呼び出すことによって、DataSetDataTable に格納されます。 この例の DataTableBookTableという名前です。 次に、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;
}
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

その後、ListBoxItemsSource プロパティを DataSetBookTable にバインドできます。

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

関連項目