2011-12-06 21 views
8

¿Por qué obtengo este error al eliminar una fila en el control DataGridView? ¿Cómo puedo solucionar este problema?¿Por qué obtengo este error al eliminar una fila en el control DataGridView?

Rows cannot be programmatically removed unless the DataGridView is data-bound to an IBindingList that supports change notification and allows deletion. 

public partial class Form1 : Form 
    { 
     List<Person> person = new List<Person>(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     void Form1Load(object sender, EventArgs e) 
     { 
      person.Add(new Person("McDonalds", "Ronald")); 
      person.Add(new Person("Rogers", "Kenny"));   
      dataGridView1.DataSource = person; 
     } 

     void BtnDeleteClick(object sender, EventArgs e) 
     { 
      dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index); 
     } 
    } 

Respuesta

14

List<T> no implementa IBindingList,

public class List<T> : IList<T>, ICollection<T>, 
    IEnumerable<T>, IList, ICollection, IEnumerable 

Es necesario utilizar una clase que implementa IBindingList

Utilice un BindingList<T> o DataTable lugar

+0

así que en vez de la lista , qué tengo que hacer algo BindingList ? – yonan2236

+0

Sí. Eso debería funcionar. –

+0

Gracias y Google. Acabo de encontrarme con este error ahora :) – Latheesan

2

Tienes que eliminar un elemento de la lista person.

person.RemoveAt(0); 
0

Mi solución:

void BtnDeleteClick(object sender, EventArgs e) 
{ 
    person.RemoveAt(dataGridView1.SelectedRows[0].Index); 
} 
Cuestiones relacionadas