Cenni preliminari sul controllo DataGrid (Windows Form)

Nota

Benché il controllo DataGridView sostituisca il controllo DataGrid aggiungendovi funzionalità, il controllo DataGrid viene mantenuto per compatibilità con le versioni precedenti e per un eventuale uso futuro. Per altre informazioni, vedere Differenze tra i controlli DataGridView e DataGrid Windows Form.

Il controllo DataGrid Windows Forms visualizza i dati in una serie di righe e colonne. Il caso più semplice è quando la griglia è associata a un'origine dati con una singola tabella che non contiene relazioni. In questo caso, i dati vengono visualizzati in semplici righe e colonne, come in un foglio di calcolo. Per altre informazioni sul data binding ad altri controlli, vedere Data binding e Windows Form.

Se DataGrid è associato a dati con più tabelle correlate e se è abilitata l'esplorazione della griglia, la griglia visualizzerà degli espansori in ogni riga. Con un espansore, l'utente può spostarsi da una tabella padre a una tabella figlio. Facendo clic su un nodo, viene visualizzata la tabella figlio e, facendo clic su un pulsante Indietro, viene visualizzata la tabella padre originale. In questo modo, nella griglia vengono visualizzate le relazioni gerarchiche tra le tabelle.

Lo screenshot seguente mostra un datagrid associato ai dati con più tabelle:

A WinForms app showing a DataGrid bound to data with multiple tables.

DataGrid può fornire un'interfaccia utente per un set di dati, la navigazione tra tabelle correlate e funzionalità avanzate di formattazione e modifica.

La visualizzazione e la manipolazione dei dati sono funzioni separate: il controllo gestisce l'interfaccia utente, mentre gli aggiornamenti dei dati vengono gestiti dall'architettura di data binding Windows Form e dai provider di dati .NET Framework. Quindi più controlli associati alla stessa origine dati resteranno sincronizzati.

Nota

Se si ha familiarità con il controllo DataGrid in Visual Basic 6.0, si noteranno alcune differenze significative nel controllo DataGrid Windows Form.

Quando la griglia è associata a un DataSet, le colonne e le righe vengono automaticamente create, formattate e compilate. Per altre informazioni, vedere Data binding e Windows Form. Dopo la generazione del controllo DataGrid, è possibile aggiungere, eliminare, riorganizzare e formattare le colonne e le righe in base alle proprie esigenze.

Data binding al controllo

Per funzionare, il controllo DataGrid deve essere associato a un'origine dati usando le proprietà DataSource e DataMember in fase di progettazione o il metodo SetDataBindingin fase di esecuzione. Questa associazione associa DataGrid a un oggetto origine dati di cui è stata creata un'istanza, ad esempio DataSet o DataTable. Il controllo DataGrid mostra i risultati delle azioni eseguite sui dati. La maggior parte delle azioni specifiche dei dati non viene eseguita tramite DataGrid, ma tramite l'origine dati.

Se i dati nel set di dati associato vengono aggiornati con qualsiasi meccanismo, il controllo DataGrid rispecchia le modifiche. Se la griglia dati e i relativi stili di tabella e colonna hanno la ReadOnly proprietà impostata su false, i dati nel set di dati possono essere aggiornati tramite il DataGrid controllo .

In DataGrid può essere visualizzata una sola tabella per volta. Se viene definita una relazione padre-figlio tra le tabelle, l'utente può spostarsi tra le tabelle correlate per selezionare la tabella da visualizzare nel controllo DataGrid. Per informazioni sull'associazione di un DataGrid controllo a un'origine dati ADO.NET in fase di progettazione o in fase di esecuzione, vedere Procedura: Associare il controllo DataGrid Windows Form a un'origine dati.

Le origini dati valide per DataGrid includono:

Se l'origine è un set di dati, il set di dati potrebbe essere un oggetto nel form o un oggetto passato al form da un servizio Web XML. È possibile eseguire il binding sia a set di dati tipizzati che non tipizzati.

È anche possibile associare un controllo DataGrid ad altre strutture se gli oggetti nella struttura, ad esempio gli elementi in una matrice, espongono proprietà pubbliche. La griglia visualizzerà tutte le proprietà pubbliche degli elementi nella struttura. Ad esempio, se si associa il controllo DataGrid a una matrice di oggetti Customer, la griglia visualizzerà tutte le proprietà pubbliche di questi oggetti Customer. In alcuni casi, ciò significa che, anche se è possibile eseguire il binding alla struttura, la struttura associata risultante potrebbe non avere utilità pratica. Ad esempio, è possibile eseguire il binding a una matrice di Integer, ma, poiché il tipo di dati Integer non supporta una proprietà pubblica, la griglia non può visualizzare i dati.

È possibile eseguire il binding alle seguenti strutture se gli elementi espongono proprietà pubbliche:

  • Qualsiasi componente che implementa l'interfaccia IList, incluse le matrici unidimensionali.

  • Qualsiasi componente che implementa l'interfaccia IListSource,

  • Qualsiasi componente che implementa l'interfaccia IBindingList,

Per altre informazioni sulle possibili origini dati, vedere Origini dati supportate da Windows Form.

Visualizzazione della griglia

Il controllo DataGrid di solito viene usato per visualizzare una singola tabella di dati da un set di dati. Tuttavia, il controllo può anche essere usato per visualizzare più tabelle, incluse le tabelle correlate. La visualizzazione della griglia viene regolata automaticamente in base all'origine dati. La tabella seguente illustra che cosa viene visualizzato a seconda della configurazione.

Contenuto del set di dati Elementi visualizzati
Una sola tabella. La tabella viene visualizzata in una griglia.
Più tabelle. La griglia può mostrare una visualizzazione albero in cui gli utenti possono spostarsi per trovare la tabella che vogliono visualizzare.
Più tabelle correlate. La griglia può mostrare una visualizzazione albero con cui selezionare le tabelle oppure è possibile specificare che la griglia mostri la tabella padre. I record nella tabella padre consentono agli utenti di passare alle righe figlio correlate.

Nota

Le tabelle in un set di dati vengono correlate con DataRelation. Vedere anche Creare relazioni tra set di dati.

Quando il controllo DataGrid visualizza una tabella e la proprietà AllowSorting è impostata su true, i dati possono essere ripristinati facendo clic sulle intestazioni di colonna. L'utente può inoltre aggiungere righe e modificare le celle.

Le relazioni tra un set di tabelle vengono visualizzate per gli utenti usando una struttura di navigazione padre/figlio. Le tabelle padre sono il livello più elevato di dati e le tabelle figlio sono le tabelle di dati derivate dai singoli elenchi delle tabelle padre. Gli espansori vengono visualizzati in ogni riga padre che contiene una tabella figlio. Facendo clic su un espansore, viene generato un elenco di collegamenti Web alle tabelle figlio. Quando l'utente seleziona un collegamento, viene visualizzata la tabella figlio. Se si fa clic sull'icona mostra/nascondi righe padre (Show/hide parent rows icon) verranno nascoste le informazioni sulla tabella padre o si verificherà nuovamente se l'utente lo ha nascosto in precedenza. L'utente può fare clic su un pulsante Indietro per tornare alla tabella visualizzata in precedenza.

Colonne e righe

DataGrid è costituito da una raccolta di oggetti DataGridTableStyle che sono contenuti nella proprietà TableStyles dell'oggetto DataGrid. Uno stile tabella può contenere una raccolta di oggetti DataGridColumnStyle contenuti nella proprietà GridColumnStyles di DataGridTableStyle. È possibile modificare le TableStyles proprietà e GridColumnStyles usando gli editor di raccolte a cui si accede tramite la finestra Proprietà .

Qualsiasi DataGridTableStyle associato al controllo DataGrid è accessibile tramite GridTableStylesCollection. GridTableStylesCollection può essere modificato nella finestra di progettazione con l'editor della raccolta DataGridTableStyle o a livello di codice tramite la proprietà TableStyles del controllo DataGrid.

La figura seguente mostra gli oggetti inclusi nel controllo DataGrid:

Diagram that shows objects included in the DataGrid control.

Gli stili tabella e gli stili colonna vengono sincronizzati con gli oggetti DataTable e gli oggetti DataColumn impostandone le proprietà MappingName sulle proprietà TableName e ColumnName appropriate. Quando un oggetto DataGridTableStyle senza stili colonna viene aggiunto a un controllo DataGrid associato a un'origine dati valida e la proprietà MappingName dello stile tabella viene impostata su una proprietà TableName valida, viene creata una raccolta di oggetti DataGridColumnStyle per tale stile tabella. Per ogni DataColumn trovato nella raccolta Columns di DataTable, un corrispondente DataGridColumnStyle viene aggiunto a GridColumnStylesCollection. È possibile accedere all'oggetto GridColumnStylesCollection attraverso la proprietà GridColumnStyles di DataGridTableStyle. Le colonne possono essere aggiunte o eliminate dalla griglia applicando il metodo Add o Remove a GridColumnStylesCollection. Per altre informazioni, vedere Procedura: Aggiungere tabelle e colonne al controllo DataGrid Windows Form e Procedura: Eliminare o nascondere colonne nel controllo DataGrid Windows Form.

Una raccolta di tipi di colonna estende la classe DataGridColumnStyle con funzionalità avanzate di modifica e formattazione. Tutti i tipi di colonna ereditano dalla classe base DataGridColumnStyle. La classe creata dipende dalla proprietà DataType dell'oggetto DataColumn su cui si basa DataGridColumn. Ad esempio, un oggetto DataColumn con la proprietà DataType impostata su Boolean verrà associato a DataGridBoolColumn. La tabella seguente descrive ciascuno di questi tipi di colonna.

Tipo colonna Descrizione
DataGridTextBoxColumn Accetta e visualizza i dati come stringhe formattate o non formattate. Le funzionalità di modifica sono le stesse usate per modificare dati in un semplice oggetto TextBox. Eredita dall'oggetto DataGridColumnStyle.
DataGridBoolColumn Accetta e visualizza true, false e i valori null. Eredita dall'oggetto DataGridColumnStyle.

Facendo doppio clic sul bordo destro di una colonna, la colonna viene ridimensionata per poter visualizzare la didascalia completa e la voce più lunga.

Stili di tabella e stili colonna

Subito dopo aver stabilito il formato predefinito del controllo DataGrid, è possibile personalizzare i colori che verranno usati quando nella griglia dati vengono visualizzate determinate tabelle.

Questo risultato viene ottenuto creando istanze della classe DataGridTableStyle. Gli stili tabella specificano la formattazione di determinate tabelle, che è diversa da quella predefinita del controllo DataGrid stesso. Per ogni tabella può essere definito un solo stile per volta.

In alcuni casi, è preferibile che l'aspetto di una colonna specifica sia diverso da quello delle altre colonne di una particolare tabella dati. È possibile creare un set personalizzato di stili di colonna usando la proprietà GridColumnStyles.

Gli stili colonna sono correlati alle colonne in un set di dati proprio come gli stili tabella sono correlati alle tabelle di dati. Come per ogni tabella può essere definito un solo uno stile per volta, anche per ogni colonna può essere definito un solo stile, in un particolare stile tabella. Questa relazione è definita nella proprietà MappingName della colonna.

Se è stato creato uno stile di tabella senza stili di colonna aggiunti, Visual Studio aggiungerà gli stili di colonna predefiniti quando la maschera e la griglia vengono create in fase di esecuzione. Tuttavia, se è stato creato uno stile di tabella e sono stati aggiunti stili di colonna, Visual Studio non creerà stili di colonna. Inoltre, sarà necessario definire stili colonna a cui assegnare il nome di mapping per visualizzare nella griglia le colonne desiderate.

Poiché, per specificare le colonne incluse nella griglia dati, è necessario assegnare uno stile colonna e alle colonne non è stato assegnato alcuno stile colonna, è possibile includere nel set di dati le colonne di dati non visualizzate nella griglia. Tuttavia, poiché la colonna di dati è inclusa nel set di dati, è possibile modificare a livello di codice i dati non visualizzati.

Nota

In generale, creare gli stili colonna e aggiungerli alla raccolta di stili colonna prima di aggiungere gli stili tabella alla raccolta di stili tabella. Quando si aggiunge uno stile tabella vuoto alla raccolta, gli stili colonna vengono generati automaticamente. Di conseguenza, verrà generata un'eccezione se si cerca di aggiungere nuovi stili colonna con valori MappingName duplicati alla raccolta di stili colonna.

In alcuni casi, è preferibile perfezionare una sola colonna tra tante. Ad esempio, il set di dati contiene 50 colonne e ne servono solo 49. In questo caso, è più semplice importare tutte le 50 colonne e rimuoverne una a livello di codice, invece di aggiungere una per una le 49 colonne desiderate a livello di codice.

Formattazione in corso

La formattazione che può essere applicata al controllo DataGrid include gli stili bordo, gli stili delle linee della griglia, i tipi di carattere, le proprietà delle didascalie, l'allineamento dei dati e l'alternanza dei colori di sfondo tra una riga e l'altra. Per altre informazioni, vedere Procedura: Formattare il controllo DataGrid Windows Form.

evento

Oltre ai normali eventi di controllo, ad esempio MouseDown, Enter e Scroll, il controllo DataGrid supporta gli eventi associati alla modifica e alla navigazione all'interno della griglia. La proprietà CurrentCell determina quale cella viene selezionata. Quando l'utente passa a una nuova cella, viene generato l'evento CurrentCellChanged. Quando l'utente passa a una nuova tabella mediante le relazioni padre/figlio, viene generato l'evento Navigate. Quando l'utente fa clic sul pulsante Indietro mentre visualizza una tabella figlio, viene generato l'evento BackButtonClick e, quando si fa clic sull'icona per l'attivazione o la disattivazione della visualizzazione delle righe padre, viene generato l'evento ShowParentDetailsButtonClick.

Vedi anche