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. È 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 fornisce l'accesso 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 Form

Insieme Rows

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

  • La riga per i nuovi record non può essere rimossa dalla Rows raccolta a livello di codice. Viene generata un'eccezione InvalidOperationException se si tenta di eseguire questa operazione. L'utente non può inoltre 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 si tenta di eseguire questa operazione, viene generato un InvalidOperationException oggetto . Di conseguenza, la riga per i nuovi record è sempre l'ultima riga nel DataGridView controllo . I metodi per DataGridViewRowCollection l'aggiunta di righe,AddAddCopy , e AddCopies, chiamano internamente tutti i metodi di inserimento 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 Form.

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. Se si desidera personalizzare le icone, sarà necessario creare una classe personalizzata DataGridViewRowHeaderCell .

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

Se la cella di 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à dati associate 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 si tenta di eseguire questa operazione, viene generato un InvalidOperationException oggetto .

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

Modalità virtuale

Se si implementa la modalità virtuale, sarà necessario tenere traccia 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 relativa semantica delle transazioni, ad esempio se l'ambito di commit è a livello di cella o di riga. Per altre informazioni, vedere Modalità virtuale nel controllo DataGridView Windows Form.

Vedi anche