Cenni preliminari sul controllo DataGrid (Windows Form)DataGrid Control Overview (Windows Forms)

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.The DataGridView control replaces and adds functionality to the DataGrid control; however, the DataGrid control is retained for both backward compatibility and future use, if you choose. Per altre informazioni, vedere Differenze tra i controlli DataGridView e DataGrid Windows Form.For more information, see Differences Between the Windows Forms DataGridView and DataGrid Controls.

Il controllo DataGrid Windows Forms visualizza i dati in una serie di righe e colonne.The Windows Forms DataGrid control displays data in a series of rows and columns. Il caso più semplice è quando la griglia è associata a un'origine dati con una singola tabella che non contiene relazioni.The simplest case is when the grid is bound to a data source with a single table that contains no relationships. In questo caso, i dati vengono visualizzati in semplici righe e colonne, come in un foglio di calcolo.In that case, the data appears in simple rows and columns, as in a spreadsheet. Per altre informazioni sul data binding ad altri controlli, vedere Data binding e Windows Form.For more information about binding data to other controls, see Data Binding and Windows Forms.

Se DataGrid è associato a dati con più tabelle correlate e se è abilitata l'esplorazione della griglia, la griglia visualizzerà degli espansori in ogni riga.If the DataGrid is bound to data with multiple related tables, and if navigation is enabled on the grid, the grid will display expanders in each row. Con un espansore, l'utente può spostarsi da una tabella padre a una tabella figlio.With an expander, the user can move from a parent table to a child table. Facendo clic su un nodo, viene visualizzata la tabella figlio e, facendo clic su un pulsante Indietro, viene visualizzata la tabella padre originale.Clicking a node displays the child table, and clicking a back button displays the original parent table. In questo modo, nella griglia vengono visualizzate le relazioni gerarchiche tra le tabelle.In this manner, the grid displays the hierarchical relationships between tables.

La schermata seguente mostra un DataGrid associato a dati con più tabelle.The following screen shot shows a DataGrid bound to data with multiple tables.

DataGrid associato a dati con più tabelleA DataGrid bound to data with multiple tables
DataGrid associato a dati con più tabelleA 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.The DataGrid can provide a user interface for a dataset, navigation between related tables, and rich formatting and editing capabilities.

La visualizzazione e la manipolazione dei dati sono funzioni distinte: 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 di .NET Framework.NET Framework.The display and manipulation of data are separate functions: The control handles the user interface, whereas data updates are handled by the Windows Forms data-binding architecture and by .NET Framework.NET Framework data providers. Quindi più controlli associati alla stessa origine dati resteranno sincronizzati.Therefore, multiple controls bound to the same data source will stay in sync.

Nota

Se si ha familiarità con il controllo DataGrid in Visual Basic 6.0, si noteranno alcune differenze significative nel controllo DataGrid Windows Form.If you are familiar with the DataGrid control in Visual Basic 6.0, you will find some significant differences in the Windows Forms DataGrid control.

Quando la griglia è associata a un DataSet, le colonne e le righe vengono automaticamente create, formattate e compilate.When the grid is bound to a DataSet, the columns and rows are automatically created, formatted, and filled. Per altre informazioni, vedere Data binding e Windows Form.For more information, see Data Binding and Windows Forms. Dopo la generazione del controllo DataGrid, è possibile aggiungere, eliminare, riorganizzare e formattare le colonne e le righe in base alle proprie esigenze.Following the generation of the DataGrid control, you can add, delete, rearrange, and format columns and rows depending on your needs.

Data binding al controlloBinding Data to the Control

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.For the DataGrid control to work, it should be bound to a data source using the DataSource and DataMember properties at design time or the SetDataBinding method at run time. Questo binding associa DataGrid a un oggetto origine dati di cui è stata creata un'istanza, ad esempio DataSet o DataTable.This binding points the DataGrid to an instantiated data-source object, such as a DataSet or DataTable). Il controllo DataGrid mostra i risultati delle azioni eseguite sui dati.The DataGrid control shows the results of actions that are performed on the data. La maggior parte delle azioni specifiche dei dati non viene eseguita tramite DataGrid, ma tramite l'origine dati.Most data-specific actions are not performed through the DataGrid , but instead through the data source.

Se i dati nel set di dati associato vengono aggiornati con qualsiasi meccanismo, il controllo DataGrid rispecchia le modifiche.If the data in the bound dataset is updated through any mechanism, the DataGrid control reflects the changes. Se la griglia dei dati e stili di tabella e gli stili di colonna dispongono di ReadOnly proprietà impostata su false, i dati nel set di dati possono essere aggiornati tramite il DataGrid controllo.If the data grid and its table styles and column styles have the ReadOnly property set to false, the data in the dataset can be updated through the DataGrid control.

In DataGrid può essere visualizzata una sola tabella per volta.Only one table can be shown in the DataGrid at a time. 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.If a parent-child relationship is defined between tables, the user can move between the related tables to select the table to be displayed in the DataGrid control. Per informazioni sull'associazione un DataGrid il controllo a un ADO.NETADO.NET un'origine dati in fase di progettazione o in fase di esecuzione, vedere procedura: associare il controllo DataGrid Windows Form a un'origine dati.For information about binding a DataGrid control to an ADO.NETADO.NET data source at either design time or run time, see How to: Bind the Windows Forms DataGrid Control to a Data Source.

Le origini dati valide per DataGrid includono:Valid data sources for the DataGrid include:

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.If your source is a dataset, the dataset might be an object in the form or an object passed to the form by an XML Web service. È possibile eseguire il binding sia a set di dati tipizzati che non tipizzati.You can bind to either typed or untyped datasets.

È anche possibile associare un controllo DataGrid ad altre strutture se gli oggetti nella struttura, ad esempio gli elementi in una matrice, espongono proprietà pubbliche.You can also bind a DataGrid control to additional structures if the objects in the structure, such as the elements in an array, expose public properties. La griglia visualizzerà tutte le proprietà pubbliche degli elementi nella struttura.The grid will display all the public properties of the elements in the structure. 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.For example, if you bind the DataGrid control to an array of customer objects, the grid will display all the public properties of those customer objects. In alcuni casi, ciò significa che, anche se è possibile eseguire il binding alla struttura, la struttura associata risultante potrebbe non avere utilità pratica.In some instances, this means that although you can bind to the structure, the resulting bound structure might not have practical application. 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.For example, you can bind to an array of integers, but because the Integer data type does not support a public property, the grid cannot display any data.

È possibile eseguire il binding alle seguenti strutture se gli elementi espongono proprietà pubbliche:You can bind to the following structures if their elements expose public properties:

  • Qualsiasi componente che implementa l'interfaccia IList,Any component that implements the IList interface. incluse le matrici unidimensionali.This includes single-dimension arrays.

  • Qualsiasi componente che implementa l'interfaccia IListSource.Any component that implements the IListSource interface.

  • Qualsiasi componente che implementa l'interfaccia IBindingList.Any component that implements the IBindingList interface.

Per altre informazioni sulle possibili origini dati, vedere Origini dati supportate da Windows Form.For more information about possible data sources, see Data Sources Supported by Windows Forms.

Visualizzazione della grigliaGrid Display

Il controllo DataGrid di solito viene usato per visualizzare una singola tabella di dati da un set di dati.A common use of the DataGrid control is to display a single table of data from a dataset. Tuttavia, il controllo può anche essere usato per visualizzare più tabelle, incluse le tabelle correlate.However, the control can also be used to display multiple tables, including related tables. La visualizzazione della griglia viene regolata automaticamente in base all'origine dati.The display of the grid is adjusted automatically according to the data source. La tabella seguente illustra che cosa viene visualizzato a seconda della configurazione.The following table shows what is displayed for various configurations.

Contenuto del set di datiContents of data set Elementi visualizzatiWhat is displayed
Una sola tabella.Single table. La tabella viene visualizzata in una griglia.Table is displayed in a grid.
Più tabelle.Multiple tables. La griglia può mostrare una visualizzazione albero in cui gli utenti possono spostarsi per trovare la tabella che vogliono visualizzare.The grid can display a tree view that users can navigate to locate the table they want to display.
Più tabelle correlate.Multiple related tables. La griglia può mostrare una visualizzazione albero con cui selezionare le tabelle oppure è possibile specificare che la griglia mostri la tabella padre.The grid can display a tree view to select tables with, or you can specify that the grid display the parent table. I record nella tabella padre consentono agli utenti di passare alle righe figlio correlate.Records in the parent table let users navigate to related child rows.

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.When the DataGrid control is displaying a table and the AllowSorting property is set to true, data can be resorted by clicking the column headers. L'utente può inoltre aggiungere righe e modificare le celle.The user can also add rows and edit cells.

Le relazioni tra un set di tabelle vengono visualizzate per gli utenti usando una struttura di navigazione padre/figlio.The relationships between a set of tables are displayed to users by using a parent/child structure of navigation. 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.Parent tables are the highest level of data, and child tables are those data tables that are derived from the individual listings in the parent tables. Gli espansori vengono visualizzati in ogni riga padre che contiene una tabella figlio.Expanders are displayed in each parent row that contains a child table. Facendo clic su un espansore, viene generato un elenco di collegamenti Web alle tabelle figlio.Clicking an expander generates a list of Web-like links to the child tables. Quando l'utente seleziona un collegamento, viene visualizzata la tabella figlio.When the user selects a link, the child table is displayed. Facendo clic sull'icona che consente di mostrare o nascondere le righe padre (Icona che consente di mostrare o nascondere le righe padre), le informazioni sulla tabella padre verranno nascoste oppure visualizzate, se l'utente le aveva in precedenza nascoste.Clicking the show/hide parent rows icon (show/hide parent rows icon) will hide the information about the parent table or cause it to reappear if the user has previously hidden it. L'utente può fare clic su un pulsante Indietro per tornare alla tabella visualizzata in precedenza.The user can click a back button to move back to the previously viewed table.

Colonne e righeColumns and Rows

DataGrid è costituito da una raccolta di oggetti DataGridTableStyle che sono contenuti nella proprietà TableStyles dell'oggetto DataGrid.The DataGrid consists of a collection of DataGridTableStyle objects that are contained in the DataGrid control's TableStyles property. Uno stile tabella può contenere una raccolta di oggetti DataGridColumnStyle contenuti nella proprietà GridColumnStyles di DataGridTableStyle.A table style may contain a collection of DataGridColumnStyle objects that are contained in the GridColumnStyles property of the DataGridTableStyle.. È possibile modificare il TableStyles e GridColumnStyles proprietà utilizzando l'editor della raccolta tramite il proprietà finestra.You can edit the TableStyles and GridColumnStyles properties by using collection editors accessed through the Properties window.

Qualsiasi DataGridTableStyle associato al controllo DataGrid è accessibile tramite GridTableStylesCollection.Any DataGridTableStyle associated with the DataGrid control can be accessed through the 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.The GridTableStylesCollection can be edited in the designer with the DataGridTableStyle collection editor, or programmatically through the DataGrid control's TableStyles property.

Oggetti inclusi nel controllo DataGridObjects included in the DataGrid control
La figura seguente mostra gli oggetti inclusi nel controllo DataGrid.The following illustration shows the 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.Table styles and column styles are synchronized with DataTable objects and DataColumn objects by setting their MappingName properties to the appropriate TableName and ColumnName properties. 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.When a DataGridTableStyle that has no column styles is added to a DataGrid control bound to a valid data source, and the MappingName property of that table style is set to a valid TableName property, a collection of DataGridColumnStyle objects is created for that table style. Per ogni DataColumn trovato nella raccolta Columns di DataTable, un corrispondente DataGridColumnStyle viene aggiunto a GridColumnStylesCollection.For each DataColumn found in the Columns collection of the DataTable, a corresponding DataGridColumnStyle is added to the GridColumnStylesCollection. È possibile accedere all'oggetto GridColumnStylesCollection attraverso la proprietà GridColumnStyles di DataGridTableStyle.GridColumnStylesCollection is accessed through the GridColumnStyles property of the DataGridTableStyle. Le colonne possono essere aggiunte o eliminate dalla griglia applicando il metodo Add o Remove a GridColumnStylesCollection.Columns can be added or deleted from the grid using the Add or Remove method on the 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.For more information, see How to: Add Tables and Columns to the Windows Forms DataGrid Control and How to: Delete or Hide Columns in the Windows Forms DataGrid Control.

Una raccolta di tipi di colonna estende la classe DataGridColumnStyle con funzionalità avanzate di modifica e formattazione.A collection of column types extends the DataGridColumnStyle class with rich formatting and editing capabilities. Tutti i tipi di colonna ereditano dalla classe base DataGridColumnStyle.All column types inherit from the DataGridColumnStyle base class. La classe creata dipende dalla proprietà DataType dell'oggetto DataColumn su cui si basa DataGridColumn.The class that is created depends on the DataType property of the DataColumn from which the DataGridColumn is based. Ad esempio, un oggetto DataColumn con la proprietà DataType impostata su Boolean verrà associato a DataGridBoolColumn.For example, a DataColumn that has its DataType property set to Boolean will be associated with the DataGridBoolColumn. La tabella seguente descrive ciascuno di questi tipi di colonna.The following table describes each of these column types.

Tipo di colonnaColumn Type DescrizioneDescription
DataGridTextBoxColumn Accetta e visualizza i dati come stringhe formattate o non formattate.Accepts and displays data as formatted or unformatted strings. Le funzionalità di modifica sono le stesse usate per modificare dati in un semplice oggetto TextBox.Editing capabilities are the same as they are for editing data in a simple TextBox. Eredita da DataGridColumnStyle.Inherits from DataGridColumnStyle.
DataGridBoolColumn Accetta e visualizza true, false e i valori null.Accepts and displays true, false, and null values. Eredita da DataGridColumnStyle.Inherits from 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.Double-clicking the right edge of a column resizes the column to display its full caption and widest entry.

Stili di tabella e stili colonnaTable Styles and Column Styles

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.As soon as you have established the default format of the DataGrid control, you can customize the colors that will be used when certain tables are displayed within the data grid.

Questo risultato viene ottenuto creando istanze della classe DataGridTableStyle.This is achieved by creating instances of the DataGridTableStyle class. Gli stili tabella specificano la formattazione di determinate tabelle, che è diversa da quella predefinita del controllo DataGrid stesso.Table styles specify the formatting of specific tables, distinct from the default formatting of the DataGrid control itself. Per ogni tabella può essere definito un solo stile per volta.Each table may have only one table style defined for it at a time.

In alcuni casi, è preferibile che l'aspetto di una colonna specifica sia diverso da quello delle altre colonne di una particolare tabella dati.Sometimes, you will want to have a specific column look different from the rest of the columns of a particular data table. È possibile creare un set personalizzato di stili di colonna usando la proprietà GridColumnStyles.You can create a customized set of column styles by using the GridColumnStyles property.

Gli stili colonna sono correlati alle colonne in un set di dati proprio come gli stili tabella sono correlati alle tabelle di dati.Column styles are related to columns in a dataset just like table styles are related to data tables. 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.Just as each table may only have one table style defined for it at a time, so too can each column only have one column style defined for it, in a particular table style. Questa relazione è definita nella proprietà MappingName della colonna.This relationship is defined in the column's MappingName property.

Se è stato creato uno stile tabella senza aggiungervi stili di colonna, Visual Studio aggiungerà gli stili colonna predefiniti quando il form e la griglia vengono creati in fase di esecuzione.If you have created a table style without column styles added to it, Visual Studio will add default column styles when the form and grid are created at run time. Tuttavia, se si hanno creato uno stile di tabella e aggiungervi tutti gli stili colonna, Visual Studio non creerà alcuno stile colonna.However, if you have created a table style and added any column styles to it, Visual Studio will not create any column styles. Inoltre, sarà necessario definire stili colonna a cui assegnare il nome di mapping per visualizzare nella griglia le colonne desiderate.Also, you will need to define column styles and assign them with the mapping name to have the columns that you want appear in the grid.

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.Because you specify which columns are included in the data grid by assigning them a column style and no column style has been assigned to the columns, you can include columns of data in the dataset that are not displayed in the grid. Tuttavia, poiché la colonna di dati è inclusa nel set di dati, è possibile modificare a livello di codice i dati non visualizzati.However, because the data column is included in the dataset, you can programmatically edit the data that is not displayed.

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.In general, create column styles and add them to the column styles collection before adding table styles to the table styles collection. Quando si aggiunge uno stile tabella vuoto alla raccolta, gli stili colonna vengono generati automaticamente.When you add an empty table style to the collection, column styles are automatically generated for you. Di conseguenza, verrà generata un'eccezione se si cerca di aggiungere nuovi stili colonna con valori MappingName duplicati alla raccolta di stili colonna.Consequently, an exception will be thrown if you try to add new column styles with duplicate MappingName values to the column styles collection.

In alcuni casi, è preferibile perfezionare una sola colonna tra tante. Ad esempio, il set di dati contiene 50 colonne e ne servono solo 49.Sometimes, you will want to just tweak one column among many columns; for example, the dataset contains 50 columns and you only want 49 of them. 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.In this case, it is easier to import all 50 columns and programmatically remove one, rather than programmatically adding each of the 49 individual columns you want.

FormattazioneFormatting

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.Formatting that can be applied to the DataGrid control includes border styles, gridline styles, fonts, caption properties, data alignment, and alternating background colors between rows. Per altre informazioni, vedere Procedura: Formattare il controllo DataGrid Windows Form.For more information, see How to: Format the Windows Forms DataGrid Control.

EventiEvents

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.Besides the common control events such as MouseDown, Enter, and Scroll, the DataGrid control supports events associated with editing and navigation within the grid. La proprietà CurrentCell determina quale cella viene selezionata.The CurrentCell property determines which cell is selected. Quando l'utente passa a una nuova cella, viene generato l'evento CurrentCellChanged.The CurrentCellChanged event is raised when the user navigates to a new cell. Quando l'utente passa a una nuova tabella mediante le relazioni padre/figlio, viene generato l'evento Navigate.When the user navigates to a new table through parent/child relations, the Navigate event is raised. 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.The BackButtonClick event is raised when the user clicks the back button when the user is viewing a child table, and the ShowParentDetailsButtonClick event is raised when the show/hide parent rows icon is clicked.

Vedere ancheSee Also

Controllo DataGridDataGrid Control
Procedura: Associare il controllo DataGrid Windows Form a un'origine datiHow to: Bind the Windows Forms DataGrid Control to a Data Source
Procedura: Aggiungere tabelle e colonne al controllo DataGrid Windows FormHow to: Add Tables and Columns to the Windows Forms DataGrid Control
Procedura: Eliminare o nascondere colonne nel controllo DataGrid Windows FormHow to: Delete or Hide Columns in the Windows Forms DataGrid Control
Procedura: Formattare il controllo DataGrid di Windows FormHow to: Format the Windows Forms DataGrid Control