次の方法で共有


チュートリアル: 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 エンティティ データ モデル] を選択します。

    ADO.NET エンティティ データ モデル項目テンプレート

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

    エンティティ データ モデル ウィザードが表示されます。

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

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

    名前が で、[App.Config にエンティティ接続設定を として保存する] チェック ボックス オンになっていることを確認し、[次 ] をクリックします。

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

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

    テーブルから Product と ProductCategory を選択

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

    Product エンティティと ProductCategory エンティティは、エンティティ デザイナーに表示されます。

    Product エンティティ モデルと ProductCategory エンティティ モデル

データを取得して表示する

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

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

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

    <DataGrid Name="dataGrid1" />
    

    DataGridDataGrid_SQL_EF_Step6 を使用した ウィンドウ

  4. Windowを選択します。

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

    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. 結合されたテーブルから特定の値のみを取得し、ItemsSourceDataGrid プロパティをクエリの結果に設定する次のコードを追加します。

    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 が表示されます。

    SQL Database のデータが表示された DataGrid

こちらも参照ください