2009-04-29 14 views
6

Viene visualizzato il seguente messaggio quando tento di rimuovere l'ultimo elemento in una vista datagrid.InvalidOperationException su Databinding durante la rimozione dell'ultimo elemento nell'elenco

DataBinding non è in grado di trovare una riga nell'elenco adatta per tutti i binding.

Ho la mia impostazione di binding come segue.

ExtendedBindingList<MyClass> bl = new ExtendedBindingList<MyClass>(GetDataFromDB()); 
BindingSource bs = new BindingSource(); 
bs.DataSource = bl; 
dgv.DataSource = bs; 

ExtendedBindingList è solo qualcosa di semplice ho buttato insieme per attuare l'ordinamento e filtraggio e alcuni persistenza dello stato di base. dgv è il DataGridView. GetDataFromDB restituisce un elenco di MyClass.

Il problema si pone solo quando si tenta di rimuovere l'ultimo elemento dal DataGridView utilizzando:

bs.RemoveCurrent(); 

che funziona in tutti gli altri. Il mio unico suggerimento per una soluzione è rimuovere tutti i binding e riapplicarli ma questa non sembra una soluzione ideale.

MODIFICA L'eccezione viene generata solo dopo che BindingList rimuove con successo l'ultimo elemento in questione. Viene generato in codice esterno, quindi non posso dire esattamente cosa lo stia lanciando.

Quindi, eccomi, chiedo un aiuto :).

Grazie in anticipo, Justin

risposta

0

ecco come lo Elimina selezionati riga da una griglia:

private void btnDelete_Click(object sender, EventArgs e) 
{ 
    if (grid.CurrentRow == null) return; 
    var selectedItem = grid.CurrentRow.DataBoundItem as PartGroup; 
    if (selectedItem != null && 
    UIHelper.ShowQuestion("Are you sure you want to delete selected row?") == System.Windows.Forms.DialogResult.Yes) 
    { 
    groups.Remove(selectedItem); 
    } 
}

gruppi è il mio BindingListEx (Of T).

Spero che aiuti.

+0

Sto usando un DataGridView non un Grid, ma questo è essenzialmente quello che sto usando. Funziona ogni volta tranne quando rimuovo l'ultimo oggetto. –

+0

È un DataGridView nel mio esempio. BindingSource viene anche utilizzato, ma si elimina da BindingListEx, non da BindingSource. Prova questo codice. Penso anche che il tuo problema sia in qualche modo correlato all'ultima riga che è per l'aggiunta rapida di righe (AllowUserAddNewRows = true). Ricordo che avevo un problema con esso e quindi ho deciso di disattivarlo (imposta AllowUserAddNewRows su false). – nightcoder

+0

Hmm, ci provo. –

0

[dispiace, non proprio una risposta, ma sento che questo è importante dal momento che non è stata data risposta.]

mi è stato sempre la stessa situazione esatta utilizzando .NET Compact Framework 2.0. Il test è stato tracciato fino al punto in cui è stato utilizzato NumericUpDown.DataBindings.Add() per collegare il controllo all'origine. Dopo questo punto, l'uso di RemoveCurrent() produrrebbe l'errore se l'elemento era l'ultimo nella fonte. Prima di quell'associazione (o se era stata saltata), l'errore non sarebbe mai apparso.

Altri controlli sono stati associati a questa stessa origine, TextBox e ComboBox, ma non hanno causato questo comportamento. Solo il controllo NumericUpDown.

Problemi correlati