绑定以允许在DataGridView上进行CRUD操作

时间:2016-06-08 00:58:19

标签: c# winforms entity-framework datagridview

我正在研究实体框架并对其操作有一个合理的理解,但是当我将实体绑定到Winforms中的DataGridView控件时,我遇到了一些问题。

我遇到的问题是数据实体与控制DataSource之间似乎存在脱节。

我使用LINQ to Entities设置DataGridView的DataSource(这是在Form Load事件中执行的):

DbContext context = new DbContext();
FormGrid.DataSource = context.USER_LIST
    .Where(x => x.USER_ID > 1)
    .ToList()

这将返回DataGridView中的5行; DataGridView中的列添加了DataPropertyName,它匹配我想要在网格中显示的对象的属性,因为在这个实例中,网格是USER_LIST对象的列表,但可以是任何类型的列表来自实体模型中DbSet<T>的对象。

在向网格添加新行时,我首先创建一个新的USER_LIST对象,其中包含所需的默认值,因为数据库表&#39; AllowNull = false&#39;列:

USER_LIST NewUser = new USER_LIST() { USER_ID = FGetNextID("USER"), PASSWORD = "p", USER_NAME = "NewUser" };

但是,在尝试添加此对象时遇到问题:将其添加到DataGridView中新行中的数据不会将其添加到context.USER_LIST集合并将其直接添加到{{1} }没有在DataGridView中添加新行,让我觉得我正在将数据绑定到DataGridView。

我希望能够实例化一个新的实体对象,然后将其添加到DbSet,然后由DataGridView控件中添加的新行反映出来。然后,当通过DataGridView对任何其他对象进行任何更改并调用context.USER_LIST时,将确认这些更改。

1 个答案:

答案 0 :(得分:0)

由于我不确定如何将评论标记为已接受的答案,我已在此处回答以尝试将其关闭。

根据Robert Harvey建议的链接,我实现了以下内容,既满足了建立双向数据绑定的要求,又排除了我不希望包含在网格数据中的记录:

context.USER_LIST
       .Where(x => x.USER_ID > 1)
       .Load();
FormGrid.DataSource = context.USER_LIST.Local.ToBindingList();