チュートリアル: DataGrid コントロールで SQL Server データベースのデータを表示する

このチュートリアルでは、SQL Server データベースからデータを取得し、そのデータを DataGrid コントロールに表示します。 ADO.NET Entity Framework を使用して、データを表すエンティティ クラスを作成し、LINQ を使用して、指定されたデータをエンティティ クラスから取得するクエリを記述します。

必須コンポーネント

このチュートリアルを実行するには、次のコンポーネントが必要です。

  • Visual Studio

  • AdventureWorks サンプル データベースが添付された、SQL Server または SQL Server Express の実行中のインスタンスへのアクセス権。 AdventureWorks データベースは GitHub からダウンロードできます。

エンティティ クラスを作成する

  1. Visual Basic または C# で新しい WPF アプリケーション プロジェクトを作成し、DataGridSQLExample という名前を付けます。

  2. ソリューション エクスプローラーでプロジェクトを右クリックし、 [追加] をポイントし、 [新しい項目] を選択します。

    [新しい項目の追加] ダイアログ ボックスが表示されます。

  3. [インストール済みのテンプレート] ペインで [データ] を選択し、テンプレート一覧で [ADO.NET Entity Data Model] を選択します。

    ADO.NET Entity Data Model item template

  4. ファイルに AdventureWorksModel.edmx と名前を付け、 [追加] をクリックします。

    Entity Data Model ウィザードが表示されます。

  5. [モデルのコンテンツの選択] 画面で、 [データベースから EF Designer] をクリックし、 [次へ] をクリックします。

  6. [データ接続の選択] 画面で、AdventureWorksLT2008 データベースへの接続を指定します。 詳細については、「[データ接続の選択] ダイアログ ボックス」を参照してください。

    名前が AdventureWorksLT2008Entities であり、 [エンティティ接続設定に名前を付けて App.Config に保存] チェック ボックスがオンであることを確認してから、 [次へ] をクリックします。

  7. [データベース オブジェクトの選択] 画面で、[テーブル] ノードを展開し、Product および ProductCategory テーブルを選択します。

    すべてのテーブルのエンティティ クラスを生成できます。ただし、この例では、これら 2 つのテーブルからのみデータを取得します。

    Select Product and ProductCategory from tables

  8. [完了] をクリックします。

    Entity Designer に Product および ProductCategory エンティティが表示されます。

    Product and ProductCategory entity models

データの取得と表示

  1. MainWindow.xaml ファイルを開きます。

  2. WindowWidth プロパティを 450 に設定します。

  3. XAML エディターで、<Grid> タグと </Grid> タグの間に次の DataGrid タグを追加して、dataGrid1 という名前の DataGrid を追加します。

    <DataGrid Name="dataGrid1" />
    

    Window with DataGrid

  4. Windowを選択します。

  5. プロパティ ウィンドウまたは XAML エディターを使用して、Loaded イベントの Window_Loaded という名前の Window のイベント ハンドラーを作成します。 詳細については、方法: 単純なイベント ハンドラーを作成する」を参照してください。

    MainWindow.xaml の XAML を次に示します。

    注意

    Visual Basic を使用する場合は、MainWindow.xaml の最初の行の x:Class="DataGridSQLExample.MainWindow"x:Class="MainWindow" に置き換えます。

    <Window x:Class="DataGridSQLExample.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="450" 
            Loaded="Window_Loaded">
        <Grid>
            <DataGrid Name="dataGrid1" />
        </Grid>
    </Window>
    
  6. Window の分離コード ファイル (MainWindow.xaml.vb または MainWindow.xaml.cs) を開きます。

  7. 次のコードを追加して、結合されたテーブルから特定の値のみを取得し、DataGridItemsSource プロパティをクエリの結果に設定します。

    using System.Data.Entity.Core.Objects;
    using System.Linq;
    using System.Windows;
    
    namespace DataGridSQLExample
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            AdventureWorksLT2008Entities dataEntities = new AdventureWorksLT2008Entities();
    
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                var query =
                from product in dataEntities.Products
                where product.Color == "Red"
                orderby product.ListPrice
                select new { product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice };
    
                dataGrid1.ItemsSource = query.ToList();
            }
        }
    }
    
    Imports System.Data.Objects
    
    Class MainWindow
        Dim dataEntities As AdventureWorksLT2008Entities = New AdventureWorksLT2008Entities
    
        Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
            Dim products As ObjectQuery(Of Product) = dataEntities.Products
    
            Dim query = _
                From product In products _
                Where product.Color = "Red" _
                Order By product.ListPrice _
                Select product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice
    
            dataGrid1.ItemsSource = query.ToList()
        End Sub
    End Class
    
  8. 例を実行します。

    データを表示する DataGrid が表示されます。

    DataGrid with data from SQL database

関連項目