Procedure consigliate per ridimensionare il controllo DataGridView Windows FormBest Practices for Scaling the Windows Forms DataGridView Control

Il DataGridView controllo è progettato per offrire la massima scalabilità.The DataGridView control is designed to provide maximum scalability. Se si desidera visualizzare grandi quantità di dati, è necessario seguire le linee guida descritte in questo argomento per evitare consumando ingenti quantità di memoria o degradare la velocità di risposta dell'interfaccia utente (UI).If you need to display large amounts of data, you should follow the guidelines described in this topic to avoid consuming large amounts of memory or degrading the responsiveness of the user interface (UI). Questo argomento vengono illustrati i problemi seguenti:This topic discusses the following issues:

  • Usando gli stili della cella in modo efficienteUsing cell styles efficiently

  • Utilizzo efficiente di menu di scelta rapidaUsing shortcut menus efficiently

  • Tramite il ridimensionamento automatico in modo efficienteUsing automatic resizing efficiently

  • Usando le raccolte di celle, righe e colonne selezionate in modo efficienteUsing the selected cells, rows, and columns collections efficiently

  • Utilizzo di righe condiviseUsing shared rows

  • Impedisce la rimozione della condivisione di righePreventing rows from becoming unshared

Se si hanno esigenze di prestazioni speciali, è possibile implementare la modalità virtuale e fornire le proprie operazioni di gestione dati.If you have special performance needs, you can implement virtual mode and provide your own data management operations. Per altre informazioni, vedere modalità di visualizzazione dei dati nel controllo DataGridView Windows Form.For more information, see Data Display Modes in the Windows Forms DataGridView Control.

Usando gli stili della cella in modo efficienteUsing Cell Styles Efficiently

Ogni cella, riga e colonna può avere le proprie informazioni di stile.Each cell, row, and column can have its own style information. Le informazioni sullo stile vengono archiviate DataGridViewCellStyle oggetti.Style information is stored in DataGridViewCellStyle objects. La creazione di oggetti di cella per molti singoli DataGridView elementi possono risultare inefficienti, soprattutto quando si lavora con grandi quantità di dati.Creating cell style objects for many individual DataGridView elements can be inefficient, especially when working with large amounts of data. Per evitare un impatto sulle prestazioni, usare le linee guida seguenti:To avoid a performance impact, use the following guidelines:

Utilizzo efficiente di menu di scelta rapidaUsing Shortcut Menus Efficiently

Ogni cella, riga e colonna può avere un proprio menu di scelta rapida.Each cell, row, and column can have its own shortcut menu. Menu di scelta rapida di DataGridView controllo sono rappresentate da ContextMenuStrip controlli.Shortcut menus in the DataGridView control are represented by ContextMenuStrip controls. Proprio come con gli oggetti di stile di cella, la creazione di menu di scelta rapida per molti singoli DataGridView elementi influirà negativamente sulle prestazioni.Just as with cell style objects, creating shortcut menus for many individual DataGridView elements will negatively impact performance. Per evitare questo problema, usare le linee guida seguenti:To avoid this penalty, use the following guidelines:

  • Evitare di creare i menu di scelta rapida per le singole celle e righe.Avoid creating shortcut menus for individual cells and rows. Ciò include il modello di riga, viene duplicato e menu di scelta rapida quando vengono aggiunte nuove righe al controllo.This includes the row template, which is cloned along with its shortcut menu when new rows are added to the control. Per ottenere la massima scalabilità, usare solo del controllo ContextMenuStrip proprietà per specificare un menu di scelta rapida singolo per l'intero controllo.For maximum scalability, use only the control's ContextMenuStrip property to specify a single shortcut menu for the entire control.

  • Se sono necessari più i menu di scelta rapida per più righe o celle, gestire le CellContextMenuStripNeeded o RowContextMenuStripNeeded gli eventi.If you require multiple shortcut menus for multiple rows or cells, handle the CellContextMenuStripNeeded or RowContextMenuStripNeeded events. Questi eventi consentono di gestire gli oggetti menu di scelta rapida manualmente, in modo da ottimizzare le prestazioni.These events let you manage the shortcut menu objects yourself, allowing you to tune performance.

Tramite il ridimensionamento automatico in modo efficienteUsing Automatic Resizing Efficiently

Le intestazioni, colonne e righe possono essere ridimensionate automaticamente come modifiche del contenuto cella in modo che l'intero contenuto delle celle è visualizzato senza troncamenti.Rows, columns, and headers can be automatically resized as cell content changes so that the entire contents of cells are displayed without clipping. Modifica delle modalità di ridimensionamento possa anche ridimensionare righe, colonne e intestazioni.Changing sizing modes can also resize rows, columns, and headers. Per determinare le dimensioni corrette, il DataGridView controllo deve esaminare il valore di ogni cella che è necessario consentirne l'utilizzo.To determine the correct size, the DataGridView control must examine the value of each cell that it must accommodate. Quando si lavora con grandi set di dati, questa analisi può influire negativamente sulle prestazioni del controllo quando si verifica il ridimensionamento automatico.When working with large data sets, this analysis can negatively impact the performance of the control when automatic resizing occurs. Per evitare effetti negativi sulle prestazioni, usare le linee guida seguenti:To avoid performance penalties, use the following guidelines:

Per altre informazioni, vedere opzioni di ridimensionamento nel controllo DataGridView Windows Form.For more information, see Sizing Options in the Windows Forms DataGridView Control.

Usando le celle selezionate, righe e le raccolte di colonne in modo efficienteUsing the Selected Cells, Rows, and Columns Collections Efficiently

Il SelectedCells insieme non viene eseguito in modo efficiente con selezioni di grandi dimensioni.The SelectedCells collection does not perform efficiently with large selections. Il SelectedRows e SelectedColumns le raccolte possono anche essere inefficiente, anche se a un livello inferiore perché sono presenti molte righe minore del numero di celle in una tipica DataGridView controllo e molti meno colonne che righe.The SelectedRows and SelectedColumns collections can also be inefficient, although to a lesser degree because there are many fewer rows than cells in a typical DataGridView control, and many fewer columns than rows. Per evitare effetti negativi sulle prestazioni quando si lavora con queste raccolte, usare le linee guida seguenti:To avoid performance penalties when working with these collections, use the following guidelines:

Utilizzo condiviso righeUsing Shared Rows

Uso efficiente della memoria viene eseguita nel DataGridView controllo condivisione delle righe.Efficient memory use is achieved in the DataGridView control through shared rows. Le righe condividono tutte le informazioni sull'aspetto e comportamento minor condividendo le istanze del DataGridViewRow classe.Rows will share as much information about their appearance and behavior as possible by sharing instances of the DataGridViewRow class.

Anche se la condivisione di istanze di riga, potrai risparmiare memoria, l'impostazione di righe possono diventare non condivise.While sharing row instances saves memory, rows can easily become unshared. Ad esempio, ogni volta che un utente interagisce direttamente con una cella, la riga corrispondente viene rimossa.For example, whenever a user interacts directly with a cell, its row becomes unshared. Poiché questo non può essere evitato, le linee guida in questo argomento sono utili solo quando si lavora con grandi quantità di dati e solo quando gli utenti interagiranno con una parte relativamente piccola dei dati ogni volta che viene eseguito il programma.Because this cannot be avoided, the guidelines in this topic are useful only when working with very large amounts of data and only when users will interact with a relatively small part of the data each time your program is run.

Una riga non può essere condiviso in un oggetto non associato DataGridView controllare se una delle relative celle contengono valori.A row cannot be shared in an unbound DataGridView control if any of its cells contain values. Quando il DataGridView controllo è associato a un'origine dati esterna o quando si implementa la modalità virtuale e fornita la propria origine dati, i valori di cella vengono archiviati all'esterno del controllo anziché in oggetti cella, consentendo la condivisione delle righe.When the DataGridView control is bound to an external data source or when you implement virtual mode and provide your own data source, the cell values are stored outside the control rather than in cell objects, allowing the rows to be shared.

Un oggetto riga può essere condiviso solo se lo stato di tutte le relative celle è possibile determinare lo stato della riga e degli stati delle colonne contenenti le celle.A row object can only be shared if the state of all its cells can be determined from the state of the row and the states of the columns containing the cells. Se si modifica lo stato di una cella in modo che non può essere dedotto dallo stato della relativa riga e colonna, la riga non può essere condivisa.If you change the state of a cell so that it can no longer be deduced from the state of its row and column, the row cannot be shared.

Ad esempio, una riga non può essere condiviso in una delle situazioni seguenti:For example, a row cannot be shared in any of the following situations:

In modalità di associazione o in modalità virtuale, è possibile fornire le descrizioni comandi e menu di scelta rapida per le singole celle gestendo il CellToolTipTextNeeded e CellContextMenuStripNeeded eventi.In bound mode or virtual mode, you can provide ToolTips and shortcut menus for individual cells by handling the CellToolTipTextNeeded and CellContextMenuStripNeeded events.

Il DataGridView controllo tenterà automaticamente di utilizzare le righe condivise ogni volta che vengono aggiunte righe al DataGridViewRowCollection.The DataGridView control will automatically attempt to use shared rows whenever rows are added to the DataGridViewRowCollection. Usare le linee guida seguenti per assicurarsi che le righe sono condivise:Use the following guidelines to ensure that rows are shared:

Per determinare se una riga è condivisa, usare il DataGridViewRowCollection.SharedRow metodo per recuperare l'oggetto riga e quindi controllare l'oggetto Index proprietà.To determine whether a row is shared, use the DataGridViewRowCollection.SharedRow method to retrieve the row object, and then check the object's Index property. Righe condivise hanno sempre un Index valore della proprietà di -1.Shared rows always have an Index property value of –1.

Impedisce la rimozione della condivisione di righePreventing Rows from Becoming Unshared

Righe condivise possono essere rimossa come risultato di azione utente o di codice.Shared rows can become unshared as a result of code or user action. Per evitare un impatto sulle prestazioni, è necessario evitare che le righe non più condivise.To avoid a performance impact, you should avoid causing rows to become unshared. Durante lo sviluppo di applicazioni, è possibile gestire il RowUnshared evento per determinare quando le righe diventano non condivise.During application development, you can handle the RowUnshared event to determine when rows become unshared. Ciò è utile durante il debug di problemi di condivisione delle righe.This is useful when debugging row-sharing problems.

Per impedire la rimozione della condivisione di righe, usare le linee guida seguenti:To prevent rows from becoming unshared, use the following guidelines:

Vedere ancheSee also