Procedura dettagliata: aggiunta di dati di un database di SQL Server in un controllo DataGrid

Questa procedura dettagliata consente di recuperare dati da un database di SQL Server e di visualizzarli in un controllo DataGrid. Si utilizzano ADO.NET Entity Framework per creare le classi di identità che rappresentano i dati e LINQ per scrivere una query che recupera i dati specificati da una classe di identità.

Prerequisiti

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

  • Visual Studio 2010.

  • Istanza in esecuzione di SQL Server o SQL Server Express a cui è collegato il database di esempio AdventureWorksLT2008 e cui è possibile accedere. È possibile scaricare il database AdventureWorksLT2008 dal sito Web CodePlex (la pagina potrebbe essere in inglese).

Per creare le classi di entità

  1. Creare un nuovo progetto di 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, quindi selezionare Nuovo elemento.

    Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento.

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

    Selezionare ADO.NET Entity Data Model

  4. Assegnare al file il nome AdventureWorksModel.edmx, quindi fare clic su Aggiungi.

    Verrà visualizzata la procedura guidata Entity Data Model.

  5. Nella schermata Scegli contenuto Model fare clic su Genera da database, quindi su Avanti.

    Selezionare l'opzione Genera da database

  6. Nella schermata Seleziona connessione dati specificare la connessione al database AdventureWorksLT2008. Per ulteriori informazioni, vedere Finestra di dialogo Scegliere la connessione dati.

    Fornire la connessione al database

  7. Verificare che il nome sia AdventureWorksLT2008Entities e che l'opzione Salva impostazioni di connessione dell'entità in App.Config come sia selezionata, quindi fare clic su Avanti.

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

    È possibile generare classi di identità per tutte le tabelle. In questo esempio verranno tuttavia recuperati i dati solo da queste due tabelle.

    Selezionare Product e ProductCategory dalle tabelle

  9. Fare clic su Fine.

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

    Modelli di entità Product e ProductCategory

Per recuperare e presentare i dati

  1. Aprire il file MainWindow.xaml.

  2. Impostare la proprietà Width dell'oggetto Window su 450.

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

    <DataGrid Name="dataGrid1" />
    

    Finestra con DataGrid

  4. Selezionare Window.

  5. Tramite la finestra Proprietà o l'editor XAML, creare un gestore eventi per l'oggetto Window denominato Window_Loaded per l'evento Loaded. Per ulteriori informazioni, vedere Procedura: creare un gestore eventi semplice.

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

    NotaNota

    Se si utilizza Visual Basic, nella prima riga di MainWindow.xaml sostituire x:Class="DataGridSQLExample.MainWindow" con x:Class="MainWindow".

    <Window x:Class="DataGridSQLExample.MainWindow"
            xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="https://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 e impostare la proprietà ItemsSource dell'oggetto DataGrid sui risultati della query.

    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
    
    using System.Data.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)
            {
                ObjectQuery<Product> products = dataEntities.Products;
    
                var query =
                from product in products
                where product.Color == "Red"
                orderby product.ListPrice
                select new { product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice };
    
                dataGrid1.ItemsSource = query.ToList();
            }
        }
    }
    
  8. Eseguire l'esempio.

    Verrà visualizzato un oggetto DataGrid contenente i dati.

    DataGrid con dati del database SQL

Vedere anche

Riferimenti

DataGrid

Altre risorse

Ricerca per categorie: introduzione a Entity Framework nelle applicazioni WPF