方法: ADO.NET データ ソースにバインドする
この例では、Windows Presentation Foundation (WPF) の ListBox コントロールを ADO.NET の DataSet
にバインドする方法を示します。
例
この例では、データ ソース (接続文字列で指定された OleDbConnection
ファイル) に接続するために、Access MDB
オブジェクトを使用します。 接続が確立されると、OleDbDataAdapter
オブジェクトが作成されます。 OleDbDataAdapter
オブジェクトでは、構造化照会言語 (SQL) の select ステートメントを実行して、データベースからレコードセットがを取得されます。 SQL コマンドの結果は、OleDbDataAdapter
の Fill
メソッドを呼び出すことによって、DataSet
の DataTable
に格納されます。 この例の DataTable
には、BookTable
という名前が付いています。 次に、ListBox の DataContext プロパティが 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
その後、ListBox の ItemsSource プロパティを、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 つの色に変換します。 このコンバーターを使用すると、NumPages
の値が 350 未満の場合は、3 番目の TextBlock の Background の色が緑になり、それ以外の場合は赤になります。 コンバーターの実装は、ここでは示されていません。
関連項目
.NET Desktop feedback