DataSource为List <myclass> </myclass>时,DataGridView删除行

时间:2014-02-05 08:40:21

标签: c# linq datagridview iqueryable

在我的DataGridView我已将 AllowUserToDeleteRows 设置为True。

当我将DataGridView的{​​{1}}设置为DataSource

IQueryable

我可以从中删除行,但是当我将其设置为var dc = new Data.CustomersDataContext(); var q = dc.Customers; dataGridView1.DataSource = q;

List<T>

我不能再删除行了(当我按下删除按钮时没有任何反应)

如何将var dc = new Data.CustomersDataContext(); var l = dc.Customers.ToList(); dataGridView1.DataSource = l; 保留为DataSource并且还能删除行?

1 个答案:

答案 0 :(得分:1)

这是因为DataGridView仅在与IBindingList实现绑定时才允许删除行(请参阅下面的注释),IBindingList.AllowRemove返回true。

您可以将列表包装到BindingList<T>,默认情况下允许删除项目:

dataGridView1.DataSource = new BindingList<Customer>(dc.Customers.ToList());

注意。 Data.CustomersDataContext.Customers实施IListSource,其中IBindingList返回AllowRemove == true,这就是您的第一个案例正常工作的原因。 DGV了解IListSource并使用IListSource.GetList()结果作为数据来源。