2009-04-29 18 views
6

Recibo el siguiente mensaje cuando intento eliminar el último elemento en una vista de cuadro de datos.InvalidOperationException en Databinding al eliminar el último elemento en la lista

DataBinding no se puede encontrar una fila en la lista que sea adecuada para todas las vinculaciones.

Tengo mi configuración de enlace de la siguiente manera.

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

ExtendedBindingList es sólo algo sencillo me tiró juntos para implementar clasificación y filtrado y un poco de persistencia de estado básico. dgv es DataGridView. GetDataFromDB devuelve una lista de MyClass.

El problema sólo surge cuando intento para eliminar el último elemento de la DataGridView usando:

bs.RemoveCurrent(); 

que funciona en cualquier otro momento. Mi única sugerencia para una solución es eliminar todas las vinculaciones y volver a aplicarlas, pero esto no parece una solución ideal.

EDIT La excepción solo se produce después de que BindingList elimine con éxito el último elemento en cuestión. Se arroja en código externo, por lo que no puedo decir exactamente qué lo está lanzando.

Entonces, aquí estoy, pidiendo SO por algo de ayuda :).

Gracias de antemano, Justin

Respuesta

0

Aquí es cómo eliminar selección fila de una cuadrícula:

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); 
    } 
}

grupos es mi BindingListEx (Of T).

Espero que ayude.

+0

Estoy usando un DataGridView no es un Grid, pero eso es esencialmente lo que estoy usando también. Funciona siempre, excepto cuando elimino el último elemento. –

+0

Es un DataGridView en mi ejemplo. BindingSource también se usa, pero elimino de BindingListEx, no de BindingSource. Solo prueba este código También creo que su problema está relacionado de alguna manera con la última fila, que es para agregar filas rápidamente (AllowUserAddNewRows = true). Recuerdo que tuve un problema y luego decidí desactivarlo (establezca AllowUserAddNewRows en falso). – nightcoder

+0

Hmm, voy a intentarlo. –

0

[Lo sentimos, no realmente una respuesta, pero siento que este es valioso ya que no se dio ninguna respuesta.]

que estaba recibiendo la misma situación exacta utilizando .NET Compact Framework 2.0. Las pruebas lo rastrearon hasta el punto donde se utilizó NumericUpDown.DataBindings.Add() para vincular el control a la fuente. Después de este punto, usar RemoveCurrent() produciría el error si el artículo era el último en la fuente. Antes de ese enlace (o si se salta), el error nunca aparecerá.

Otros controles estaban vinculados a esta misma fuente - TextBox y ComboBox - pero no causaron este comportamiento. Solo el control NumericUpDown.

Cuestiones relacionadas