实体框架:C#Winforms绑定源删除datagridview,但标记isDeleted字段为true(不删除)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了实体框架:C#Winforms绑定源删除datagridview,但标记isDeleted字段为true(不删除),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2398字,纯文字阅读大概需要4分钟。
内容图文
![实体框架:C#Winforms绑定源删除datagridview,但标记isDeleted字段为true(不删除)](/upload/InfoBanner/zyjiaocheng/811/231e5b8fbe8645aba33412a9be2e7782.jpg)
我目前正在使用Entity Framework 5开发C#Winforms应用程序.
我的问题是如何删除绑定到实体的绑定源上的项目的删除(只将标记为isDeleted字段为true).
这是我的表单截图:
DataGridView绑定到enrollmedsBindingSource.请参阅填充绑定源的表单加载代码:
private void EnrollMedicationFrm_Load(object sender, EventArgs e)
{
context.enrollmeds.Where(adm => adm.FK_Admission == _SelectedPKAdm && adm.isDeleted == false).ToList();
enrollmedsBindingSource.DataSource = context.enrollmeds.Local;
}
正如您在上面的代码中看到的,我过滤了数据以仅显示isDeleted设置为false的数据.
以下是我的删除按钮的代码:
private void DeleteBtn_Click(object sender, EventArgs e)
{
if (enrollmedsDataGridView.CurrentRow == null)
{
MessageBox.Show("No item selected.", "System Alert", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
enrollmedsBindingSource.Remove(enrollmedsBindingSource.Current);
}
}
如果我调用context.SaveChanges();此代码将从数据库中删除该项.在保存按钮上.
以下是保存按钮的代码:
private void SaveBtn_Click(object sender, EventArgs e)
{
this.enrollmedsBindingSource.EndEdit();
context.enrollmeds.Local
.Where(a => a.C__PK_EnrollMeds == 0)
.ToList().ForEach(i =>
{
i.FK_DC_Patient = pxdetails.pxDC.PK_Datacenter;
i.FK_DC_userAdd = mainfrm.PK_DC_UserLoggedIn;
i.AddDateTime = currdatetime;
i.FK_Admission = pxdetails.adm.PK_Admission;
});
this.context.SaveChanges();
enrollmedsDataGridView.Refresh();
this.Dispose();
}
我想要做的是删除DataGridView上的条目(从用户的视图),但只在数据库中标记isDeleted字段为true(用于审计目的).
注意:
只有用户完成所有更改后才会单击保存按钮,因此表单需要捕获保存时删除(isDeleted),更改和添加的内容.
解决方法:
您应该将实体的IsDeleted属性设置为true并调用SaveChanges.例如,如果您有一个Product实体:
var p = (Product)bindingSource.Current;
p.IsDeleted = true;
db.SaveChanges();
然后,如果您不打算重新加载数据,则可以从列表中删除该项以不显示它:
bs.RemoveCurrent();
db.Entry(p).State = EntityState.Detached;
或者您可以重新加载数据:
db.Products.Where(x => x.IsDeleted == false).Load();
bindingSource.DataSource = db.Products.Local;
注意
如果您不打算立即保存更改,则需要在将IsDeletet设置为true后执行其他操作:
>您可以停止连接到上下文并使用BindingList< T>或ObservableCollection< T>用于数据绑定和跟踪数据自己更改.然后,您可以简单地获取已删除项目的列表,以便在保存更改时将其IsDeleted属性设置为true.
>作为另一个选项,在将IsDeleetd设置为true后,您可以更改DataGridView中已删除行的外观.例如,您可以处理DataGridView的RowPostPaint事件,并在该行上绘制一个红色三振出局.
内容总结
以上是互联网集市为您收集整理的实体框架:C#Winforms绑定源删除datagridview,但标记isDeleted字段为true(不删除)全部内容,希望文章能够帮你解决实体框架:C#Winforms绑定源删除datagridview,但标记isDeleted字段为true(不删除)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。