Utilizzo della riga per i nuovi record del controllo DataGridView di Windows Form

Quando si usa un DataGridView oggetto per la modifica dei dati nell'applicazione, spesso si vuole consentire agli utenti di aggiungere nuove righe di dati all'archivio dati. Il DataGridView controllo supporta questa funzionalità fornendo una riga per i nuovi record, che viene sempre visualizzata come ultima riga. Viene contrassegnato con un simbolo asterisco (*) nell'intestazione di riga. Le sezioni seguenti illustrano alcuni aspetti da considerare quando si programma con la riga per i nuovi record abilitati.

Visualizzazione della riga per i nuovi record

Utilizzare la AllowUserToAddRows proprietà per indicare se viene visualizzata la riga per i nuovi record. Il valore predefinito di questa proprietà è true.

Per il caso associato a dati, la riga per i nuovi record verrà visualizzata se la AllowUserToAddRows proprietà del controllo e la IBindingList.AllowNew proprietà dell'origine dati sono entrambe true. Se uno dei due è false , la riga non verrà visualizzata.

Popolamento della riga per i nuovi record con dati predefiniti

Quando l'utente seleziona la riga per i nuovi record come riga corrente, il DataGridView controllo genera l'evento DefaultValuesNeeded .

Questo evento consente di accedere al nuovo DataGridViewRow e consente di popolare la nuova riga con i dati predefiniti. Per altre informazioni, vedere Procedura: Specificare i valori predefiniti per le nuove righe nel controllo DataGridView Windows Forms

Insieme Rows

La riga per i nuovi record è contenuta nella DataGridView raccolta del Rows controllo, ma si comporta in modo diverso in due aspetti:

  • La riga per i nuovi record non può essere rimossa dalla raccolta a Rows livello di codice. Se InvalidOperationException si tenta di eseguire questa operazione, viene generata un'eccezione . L'utente non può anche eliminare la riga per i nuovi record. Il DataGridViewRowCollection.Clear metodo non rimuove questa riga dall'insieme Rows .

  • Non è possibile aggiungere alcuna riga dopo la riga per i nuovi record. Se InvalidOperationException si tenta di eseguire questa operazione, viene generato un oggetto . Di conseguenza, la riga per i nuovi record è sempre l'ultima riga nel DataGridView controllo . I metodi su DataGridViewRowCollection che aggiungono righe, AddCopyAdde AddCopies, chiamano internamente tutti i metodi di inserimento delle chiamate quando è presente la riga per i nuovi record.

Personalizzazione visiva della riga per i nuovi record

Quando viene creata la riga per i nuovi record, si basa sulla riga specificata dalla RowTemplate proprietà . Tutti gli stili di cella non specificati per questa riga vengono ereditati da altre proprietà. Per altre informazioni sull'ereditarietà dello stile di cella, vedere Stili di cella nel controllo DataGridView Windows Forms.

I valori iniziali visualizzati dalle celle nella riga per i nuovi record vengono recuperati dalla proprietà di DefaultNewRowValue ogni cella. Per le celle di tipo DataGridViewImageCell, questa proprietà restituisce un'immagine segnaposto. In caso contrario la proprietà restituisce null. È possibile eseguire l'override di questa proprietà per restituire un valore personalizzato. Tuttavia, questi valori iniziali possono essere sostituiti da un DefaultValuesNeeded gestore eventi quando lo stato attivo entra nella riga per i nuovi record.

Le icone standard per l'intestazione di questa riga, ovvero una freccia o un asterisco, non vengono esposte pubblicamente. Per personalizzare le icone, è necessario creare una classe personalizzata DataGridViewRowHeaderCell .

Le icone standard usano la ForeColor proprietà dell'oggetto DataGridViewCellStyle utilizzato dalla cella dell'intestazione di riga. Il rendering delle icone standard non viene eseguito se non è disponibile spazio sufficiente per visualizzarli completamente.

Se la cella dell'intestazione di riga ha un valore stringa impostato e se non è disponibile spazio sufficiente per il testo e l'icona, l'icona viene eliminata per prima.

Ordinamento

In modalità non associata, i nuovi record verranno sempre aggiunti alla fine di DataGridView , anche se l'utente ha ordinato il contenuto di DataGridView. L'utente dovrà applicare nuovamente l'ordinamento per ordinare la riga alla posizione corretta; questo comportamento è simile a quello del ListView controllo .

Nelle modalità associate ai dati e virtuali, il comportamento di inserimento quando viene applicato un ordinamento dipende dall'implementazione del modello di dati. Per ADO.NET, la riga viene immediatamente ordinata nella posizione corretta.

Altre note sulla riga per i nuovi record

Non è possibile impostare la Visible proprietà di questa riga su false. Se InvalidOperationException si tenta di eseguire questa operazione, viene generato un oggetto .

La riga per i nuovi record viene sempre creata nello stato non selezionato.

Modalità virtuale

Se si implementa la modalità virtuale, è necessario tenere traccia di quando è necessaria una riga per i nuovi record nel modello di dati e quando eseguire il rollback dell'aggiunta della riga. L'implementazione esatta di questa funzionalità dipende dall'implementazione del modello di dati e dalla semantica della transazione, ad esempio se l'ambito di commit è a livello di cella o riga. Per altre informazioni, vedere Modalità virtuale nel controllo DataGridView Windows Forms.

Vedi anche