Condividi tramite


Panoramica del controllo DataGrid (Windows Forms)

Annotazioni

Il controllo DataGridView sostituisce e aggiunge funzionalità al controllo DataGrid; Tuttavia, il controllo DataGrid viene mantenuto sia per la compatibilità con le versioni precedenti che per l'uso futuro, se si sceglie. Per altre informazioni, vedere "Differenze tra i controlli DataGridView e DataGrid di Windows Forms" .

Il controllo DataGrid Windows Form 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 tal caso, i dati vengono visualizzati in righe e colonne semplici, come in un foglio di calcolo. Per ulteriori informazioni sul binding dei dati ad altri controlli, vedere Data Binding e Windows Forms.

Se il DataGrid è associato a dati con più tabelle correlate e se la navigazione è abilitata nella griglia, la griglia visualizzerà espansori in ogni riga. Con un espansore, l'utente può passare da una tabella padre a una tabella figlia. Facendo clic su un nodo viene visualizzata la tabella dei figli e facendo clic su un pulsante Indietro viene visualizzata la tabella principale originale. In questo modo, la griglia visualizza le relazioni gerarchica tra le tabelle.

Lo screenshot seguente mostra un DataGrid collegato a dati con più tabelle:

un'app WinForms che mostra un datagrid associato ai dati con più tabelle.

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

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 di Windows Form e dai provider di dati .NET Framework. Pertanto, più controlli associati alla stessa origine dati rimarranno sincronizzati.

Annotazioni

Se conosci il controllo DataGrid in Visual Basic 6.0, troverai alcune differenze significative nel controllo DataGrid di Windows Forms.

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

Collegamento dei dati al controllo

Affinché il controllo DataGrid funzioni, deve essere associato a un'origine dati usando le proprietà DataSource e DataMember in fase di progettazione o il metodo SetDataBinding in fase di esecuzione. Questa associazione punta il DataGrid a un oggetto origine dati di cui è stata creata un'istanza, ad esempio un DataSet o un DataTable). Il controllo DataGrid mostra i risultati delle azioni eseguite sui dati. La maggior parte delle azioni che riguardano specificamente i dati non viene eseguita attraverso il DataGrid, bensì attraverso l'origine dati.

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

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

Le fonti dati valide per il DataGrid includono:

Se l'origine è un set di dati, il set di dati potrebbe essere un oggetto nel formato o un oggetto passato al modulo da un servizio Web XML. È possibile collegare a set di dati tipizzati o non tipizzati.

È anche possibile associare un controllo DataGrid ad altre strutture se gli oggetti nella struttura, ad esempio gli elementi di 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 cliente, la griglia visualizzerà tutte le proprietà pubbliche di tali oggetti cliente. In alcuni casi, ciò significa che, sebbene sia possibile eseguire l'associazione alla struttura, la struttura associata risultante potrebbe non avere un'applicazione pratica. Ad esempio, è possibile eseguire il binding a una matrice di numeri interi, ma poiché il tipo di dati Integer non supporta una proprietà pubblica, la griglia non può visualizzare dati.

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

  • Qualsiasi componente che implementa l'interfaccia IList. Sono incluse matrici a dimensione singola.

  • 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

Un uso comune del controllo DataGrid consiste nel visualizzare una singola tabella di dati da un set di dati. Tuttavia, il controllo può essere usato anche per visualizzare più tabelle, incluse le tabelle correlate. La visualizzazione della griglia viene modificata automaticamente in base all'origine dati. Nella tabella seguente vengono illustrati gli elementi visualizzati per varie configurazioni.

Contenuto del set di dati Cosa viene visualizzato
Tabella singola. La tabella viene visualizzata in una griglia.
Più tabelle. La griglia può visualizzare una vista ad albero che gli utenti possono navigare per individuare la tabella da visualizzare.
Più tabelle correlate. La griglia può visualizzare una visualizzazione albero con cui selezionare le tabelle oppure è possibile specificare che la griglia visualizzi la tabella padre. I record nella tabella padre consentono agli utenti di navigare verso le righe correlate del figlio.

Annotazioni

Le tabelle in un set di dati sono correlate usando un DataRelation. Vedere anche Creare relazioni tra set di dati.

Quando il controllo DataGrid visualizza una tabella e la proprietà AllowSorting è impostata su true, è possibile riordinare i dati facendo clic sulle intestazioni delle colonne. L'utente può anche aggiungere righe e modificare le celle.

Le relazioni tra un set di tabelle vengono visualizzate agli utenti utilizzando una struttura padre/figlio di navigazione. Le tabelle padre sono il livello più elevato di dati e le tabelle figlio sono quelle tabelle di dati derivate dalle singole voci nelle tabelle padre. Gli espansori vengono visualizzati in ogni riga padre che contiene una tabella figlia. Facendo clic su un espansore viene generato un elenco di collegamenti simili a quelli del Web alle tabelle subordinate. Quando l'utente seleziona un collegamento, viene visualizzata la tabella figlio. Facendo clic sull'icona mostra/nascondi righe padre (icona Mostra/Nascondi righe padre) nasconderà le informazioni sulla tabella del genitore o le farà riapparire se l'utente le ha nascoste in precedenza. L'utente può fare clic su un pulsante Indietro per tornare alla tabella visualizzata in precedenza.

Colonne e righe

Il DataGrid è costituito da una raccolta di oggetti DataGridTableStyle contenuti nella proprietà DataGrid del controllo TableStyles. Uno stile di tabella può contenere una raccolta di oggetti DataGridColumnStyle contenuti nella proprietà GridColumnStyles del DataGridTableStyle.. Puoi modificare le proprietà TableStyles e GridColumnStyles usando gli editor di raccolte a cui si accede tramite la finestra Proprietà .

È possibile accedere a qualsiasi DataGridTableStyle associato al controllo DataGrid tramite il GridTableStylesCollection. Il GridTableStylesCollection può essere modificato nella finestra di progettazione con l'editor dell'insieme DataGridTableStyle o a livello di codice tramite la proprietà DataGrid del controllo TableStyles.

La figura seguente mostra gli oggetti inclusi nel controllo DataGrid:

Diagramma che mostra gli oggetti inclusi nel controllo DataGrid.

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

Una raccolta di tipi di colonna estende la classe DataGridColumnStyle con funzionalità avanzate di formattazione e modifica. Tutti i tipi di colonna ereditano dalla classe base DataGridColumnStyle. La classe creata dipende dalla proprietà DataType del DataColumn da cui si basa l'DataGridColumn. Ad esempio, un DataColumn con la relativa proprietà DataType impostata su Boolean verrà associato al DataGridBoolColumn. Nella tabella seguente vengono descritti ognuno di questi tipi di colonna.

Tipo di colonna Descrizione
DataGridTextBoxColumn Accetta e visualizza i dati come stringhe formattate o non formattate. Le funzionalità di modifica sono le stesse di quando si modificano i dati in un semplice TextBox. Eredita da DataGridColumnStyle.
DataGridBoolColumn Accetta e visualizza true, falsee valori Null. Eredita da DataGridColumnStyle.

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

Gli stili della tabella e della colonna

Non appena è stato stabilito il formato predefinito del controllo DataGrid, è possibile personalizzare i colori che verranno usati quando alcune tabelle vengono visualizzate all'interno della griglia dati.

Ciò si ottiene creando istanze della classe DataGridTableStyle. Gli stili di tabella specificano la formattazione di tabelle specifiche, distinte dalla formattazione predefinita del controllo DataGrid stesso. Per ogni tabella può essere definito un solo stile di tabella alla volta.

In alcuni casi, sarà necessario avere un aspetto di colonna specifico diverso dal resto delle colonne di una determinata tabella dati. È possibile creare un set personalizzato di stili di colonna usando la proprietà GridColumnStyles.

Gli stili di colonna sono correlati alle colonne in un set di dati esattamente come gli stili di tabella sono correlati alle tabelle dati. Proprio come ogni tabella può avere solo uno stile di tabella definito per la tabella alla volta, quindi anche ogni colonna può avere solo uno stile di colonna definito per esso, in uno stile di tabella specifico. Questa relazione viene 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 hai creato uno stile di tabella e vi hai aggiunto stili di colonna, Visual Studio non creerà stili di colonna. Inoltre, sarà necessario definire gli stili di colonna e assegnarli con il nome del mapping per visualizzare le colonne desiderate nella griglia.

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

Annotazioni

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

In alcuni casi, è necessario modificare solo una colonna tra molte colonne; Ad esempio, il set di dati contiene 50 colonne e si desidera solo 49 di essi. In questo caso, è più facile importare tutte le 50 colonne e rimuoverle a livello di codice, anziché aggiungere a livello di codice ognuna delle 49 singole colonne desiderate.

Formattazione

La formattazione che può essere applicata al controllo DataGrid include stili di bordo, stili griglia, tipi di carattere, proprietà della didascalia, allineamento dei dati e colori di sfondo alternati tra le righe. Per altre informazioni, vedere Procedura: Formattare il controllo DataGrid di Windows Form.

Avvenimenti

Oltre agli eventi di controllo comuni, ad esempio MouseDown, Entere Scroll, il controllo DataGrid supporta gli eventi associati alla modifica e alla navigazione all'interno della griglia. La proprietà CurrentCell determina la cella selezionata. L'evento CurrentCellChanged viene generato quando l'utente passa a una nuova cella. Quando l'utente passa a una nuova tabella tramite relazioni padre/figlio, viene generato l'evento Navigate. L'evento BackButtonClick viene generato quando l'utente fa clic sul pulsante Indietro durante la visualizzazione di una tabella figlio, e l'evento ShowParentDetailsButtonClick viene generato quando si fa clic sull'icona mostra/nascondi righe padre.

Vedere anche