Procedura dettagliata: Visualizzare i dati da un database di SQL Server in un controllo DataGrid

In questa procedura dettagliata si recuperano dati da un database di SQL Server e vengono visualizzati in un DataGrid controllo . Usare il ADO.NET Entity Framework per creare le classi di entità che rappresentano i dati e usare LINQ per scrivere una query che recupera i dati specificati da una classe di entità.

Prerequisiti

Per completare questa procedura dettagliata, è necessario disporre dei componenti seguenti:

  • Visual Studio.

  • Accesso a un'istanza in esecuzione di SQL Server o SQL Server Express a cui è collegato il database di esempio AdventureWorks. È possibile scaricare il database AdventureWorks da GitHub.

Creare classi di entità

  1. Creare un nuovo progetto applicazione WPF in Visual Basic o C# e denominarlo DataGridSQLExample.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, scegliere Aggiungi e quindi selezionare Nuovo elemento.

    Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento .

  3. Nel riquadro Modelli installati selezionare Dati e nell'elenco dei modelli selezionare ADO.NET Entity Data Model.

    ADO.NET Entity Data Model item template

  4. Assegnare un nome al file AdventureWorksModel.edmx e quindi fare clic su Aggiungi.

    Verrà visualizzata la procedura guidata Entity Data Model.

  5. Nella schermata Scegli contenuto modello selezionare Ef Designer dal database e quindi fare clic su Avanti.

  6. Nella schermata Scegli dati Connessione ion specificare la connessione al database AdventureWorksLT2008. Per altre informazioni, vedere Scegliere la finestra di dialogo Connessione dati.

    Assicurarsi che il nome sia AdventureWorksLT2008Entities e che la casella di controllo Salva impostazioni di connessione entità in App.Config come sia selezionata e quindi fare clic su Avanti.

  7. Nella schermata Scegli oggetti di database espandere il nodo Tabelle e selezionare le tabelle Product e ProductCategory .

    È possibile generare classi di entità per tutte le tabelle; Tuttavia, in questo esempio si recuperano solo i dati da queste due tabelle.

    Select Product and ProductCategory from tables

  8. Fare clic su Fine.

    Le entità Product e ProductCategory vengono visualizzate in Entity Designer.

    Product and ProductCategory entity models

Recuperare e presentare i dati

  1. Aprire il file MainWindow.xaml.

  2. Impostare la Width proprietà su Window su 450.

  3. Nell'editor XAML aggiungere il tag seguente DataGrid tra i <Grid> tag e </Grid> per aggiungere un DataGrid oggetto denominato dataGrid1.

    <DataGrid Name="dataGrid1" />
    

    Window with DataGrid

  4. Selezionare il Window.

  5. Usando l'editor Finestra Proprietà o XAML, creare un gestore eventi per l'evento WindowLoaded denominatoWindow_Loaded. Per altre informazioni, vedere Procedura: Creare un gestore eventi semplice.

    Di seguito viene illustrato il codice XAML per MainWindow.xaml.

    Nota

    Se si usa Visual Basic, nella prima riga di MainWindow.xaml sostituire x:Class="DataGridSQLExample.MainWindow" con 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. Aprire il file code-behind (MainWindow.xaml.vb o MainWindow.xaml.cs) per .Window

  7. Aggiungere il codice seguente per recuperare solo valori specifici dalle tabelle unite in join e impostare la ItemsSource proprietà dell'oggetto DataGrid sui risultati della query.

    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. Eseguire l'esempio.

    Verrà visualizzato un oggetto DataGrid che visualizza i dati.

    DataGrid with data from SQL database

Vedi anche