问题
On my DataGridView
I have set the AllowUserToDeleteRows to True.
When I set my DataGridView
's DataSource
to an IQueryable
var dc = new Data.CustomersDataContext();
var q = dc.Customers;
dataGridView1.DataSource = q;
I can delete rows from it, but when I set it to a List<T>
var dc = new Data.CustomersDataContext();
var l = dc.Customers.ToList();
dataGridView1.DataSource = l;
I can no more delete rows (nothing happens when I press delete button)
How can I keep my DataSource
as a List<T>
and also be able to delete rows?
回答1:
This happens because DataGridView
allows to remove rows only when it is bond to IBindingList
implementation (see note below), and IBindingList.AllowRemove
returns true.
You can wrap your list into BindingList<T>, which allows to remove items by default:
dataGridView1.DataSource = new BindingList<Customer>(dc.Customers.ToList());
Note. Data.CustomersDataContext.Customers
implements IListSource, which returns IBindingList
with AllowRemove == true
, that's why your first case works, as expected. DGV
knows about IListSource
and uses IListSource.GetList()
result as the data source.
来源:https://stackoverflow.com/questions/21572273/datagridview-delete-row-when-datasource-is-listmyclass