带有排序EntitySet的Datagridview<;T>;?(.NET 3.5)
我希望有一个简单的答案来回答这个我在谷歌搜索了几个小时后错过的问题 我有一个DataGridView,它需要显示和添加/删除/编辑数据库中的记录。我使用的是实体框架,所以记录最初是EntitySet带有排序EntitySet的Datagridview<;T>;?(.NET 3.5),.net,linq,datagridview,bindingsource,entityset,.net,Linq,Datagridview,Bindingsource,Entityset,我希望有一个简单的答案来回答这个我在谷歌搜索了几个小时后错过的问题 我有一个DataGridView,它需要显示和添加/删除/编辑数据库中的记录。我使用的是实体框架,所以记录最初是EntitySet 试一试 BindingSource具有排序功能,但是哦。。。如果您的数据源是EntitySet,那么它们实际上似乎不可用 第二次尝试 尝试在网格上实现自定义排序,但是哦。。。如果网格是数据绑定的,则不允许自定义排序 第三次尝试 在我的数据上形成Linq查询,并在那里使用order函数。这
- 试一试
- 第二次尝试
- 第三次尝试
- 第四次尝试
非常感谢收到的任何帮助…我仍然欢迎任何关于更好的方法的建议,但以下内容似乎对我有用 我创建BindingList的派生函数来包装LINQ返回的记录,然后将其传递给ObjectContext和EntityCollection。它覆盖AddNewCore和CancelNew以将对象放入数据库和BindingList,如果将焦点移到最下面一行但不写入任何内容,它似乎会保留更改,而不保留不需要的空行
class LinqEntityBinding<T> : System.ComponentModel.BindingList<T>
where T : System.Data.Objects.DataClasses.EntityObject
{
public LinqEntityBinding(
System.Data.Objects.ObjectContext context,
System.Data.Objects.DataClasses.EntityCollection<T> collection,
IList<T> list)
: base(list)
{
_context = context;
_collection = collection;
}
System.Data.Objects.ObjectContext _context;
System.Data.Objects.DataClasses.EntityCollection<T> _collection;
protected override object AddNewCore()
{
object obj = base.AddNewCore();
_collection.Add((T)obj);
return obj;
}
public override void CancelNew(int itemIndex)
{
object obj = Items[itemIndex];
_collection.Remove((T)obj);
if (((T)obj).EntityState != System.Data.EntityState.Detached)
{
_context.DeleteObject(obj);
}
base.CancelNew(itemIndex);
}
}
我有:
bindingSource.DataSource =
new LinqEntityBinding<Widget>(db, customer.Widgets,
customer.Widgets.OrderBy(w => w.widgetness).ToList()); // sorted
bindingSource.DataSource=
新的LinqEntityBinding(db、customer.Widgets、,
customer.Widgets.OrderBy(w=>w.widgetness.ToList());//分类
bindingSource.DataSource =
new LinqEntityBinding<Widget>(db, customer.Widgets,
customer.Widgets.OrderBy(w => w.widgetness).ToList()); // sorted