2011-12-06 8 views
8

Perché viene visualizzato questo errore quando si elimina una riga nel controllo DataGridView? Come posso risolvere questo problema?Perché viene visualizzato questo errore quando si elimina una riga nel controllo 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); 
     } 
    } 

risposta

14

List<T> non implementa IBindingList,

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

è necessario utilizzare una classe che implementa IBindingList

Utilizzare un BindingList<T> o DataTable invece

+0

così invece di Lista , devo fare qualcosa BindingList ? – yonan2236

+0

Sì. Questo dovrebbe funzionare –

+0

Grazie e a Google. Ho appena trovato questo errore ora :) – Latheesan

2

È necessario rimuovere un elemento dall'elenco person.

person.RemoveAt(0); 
0

La mia soluzione:

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