我正在研究实体框架并对其操作有一个合理的理解,但是当我将实体绑定到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
时,将确认这些更改。
答案 0 :(得分:0)
由于我不确定如何将评论标记为已接受的答案,我已在此处回答以尝试将其关闭。
根据Robert Harvey建议的链接,我实现了以下内容,既满足了建立双向数据绑定的要求,又排除了我不希望包含在网格数据中的记录:
context.USER_LIST
.Where(x => x.USER_ID > 1)
.Load();
FormGrid.DataSource = context.USER_LIST.Local.ToBindingList();