实体框架:List<绑定到DataGridView,将删除的对象添加回视图
本文关键字:删除 对象 添加 视图 DataGridView 框架 List 绑定 实体 | 更新日期: 2023-09-27 18:09:48
如何恢复绑定数据流(添加行回DataGridView)后,它已被删除?
当我单击DataGridView左侧的delete键时,UserDeletingRow事件触发,我可以捕获正在从列表中删除的实体对象(AnswerTable)。
private void visitorHostDataGridView_UserDeletingRow (object sender, DataGridViewRowCancelEventArgs e)
{
if (e.Row.DataBoundItem is VisitorHost)
{
DatatoDelete datatoDelete = new DatatoDelete (e.Row, e.Row.DataBoundItem as VisitorHost);
visitorHostsDataRowToDelete.Add (datatoDelete);
SetModified (); // turns on save and cancel buttons
}
}
之后我做一个删除当保存发生
public override void OnSave ()
{
if (visitorHostsDataRowToDelete.Count > 0)
{
foreach (DatatoDelete item in visitorHostsDataRowToDelete)
{
_context.AnswerTables.DeleteObject (item.VisitorHostRecord as VisitorHost);
}
}
visitorhostBindingSource.EndEdit ();
_context.SaveChanges ();
ClearModified (); // turns off save and cancel
MessageBox.Show ("Saved");
}
再次,我的问题是我如何恢复删除行(取消我的删除),并将对象添加回DataGridView -我点击删除后。(我不需要一个构象,我说的是我做了一些工作,意识到我犯了一个错误,想重新开始)我不想回到数据库,我不应该需要我有所有的数据,只是不知道如何使用它。
更新:
我试过List.Add(EntityObject)本身没有运气(见下文)。由于评论,再次尝试。按照以下顺序,用这三样东西更新了我的代码:
this.visitorhostBindingSource.DataSource = null;
this.visitorhostBindingSource.DataSource = _hosts;
this.visitorHostsDataGridView.Refresh ();
似乎解决了我的问题,添加单独没有使它显示在屏幕上。但不确定为什么我需要做我正在做的这些步骤。任何额外的想法都会很有用。
public override void OnCancel () // called from on click event of cancel button
{
foreach (DatatoDelete dataGridViewRow in visitorHostsDataRowToDelete)
{
_hosts.Add (dataGridViewRow.VisitorHostRecord);
}
visitorHostsDataRowToDelete.Clear();
_hosts.Sort ();
this.visitorhostBindingSource.DataSource = null;
this.visitorhostBindingSource.DataSource = _hosts;
this.visitorHostsDataGridView.Refresh ();
ClearModified (); //disable save and cancel buttons
}
在事件处理程序方法中使用return
只退出该方法,而不退出整个事件处理程序链。DataGridView
在您的处理程序被调用之前和之后(其中您的行从BindingSource
中删除)做一些事情。
要声明你真的想取消整个事件,你必须使用 e.Cancel = true;
。
因此,要取消调用处理程序后所做的所有事情,请写入:
if(answerTableDataGridView.SelectedRows.Count>1)
{
// multiselect is false so we should never hit this.
MessageBox.Show ("only one delete at a time allowed,'n Rows removed from view but NOT DELETED from the database.");
e.Cancel = true;
return;
}
CancelEventArgs。取消文档
如上所述我尝试过List.Add(EntityObject)本身,但没有运气(见下文)。由于评论,再次尝试。按照以下顺序,用这三样东西更新了我的代码:
this.visitorhostBindingSource.DataSource = null;
this.visitorhostBindingSource.DataSource = _hosts;
this.visitorHostsDataGridView.Refresh ();
似乎解决了我的问题,添加单独没有使它显示在屏幕上。但不确定为什么我需要做我正在做的这些步骤。任何额外的想法都会很有用。
public override void OnCancel () // called from on click event of cancel button
{
foreach (DatatoDelete dataGridViewRow in visitorHostsDataRowToDelete)
{
_hosts.Add (dataGridViewRow.VisitorHostRecord);
}
visitorHostsDataRowToDelete.Clear();
_hosts.Sort ();
this.visitorhostBindingSource.DataSource = null;
this.visitorhostBindingSource.DataSource = _hosts;
this.visitorHostsDataGridView.Refresh ();
ClearModified (); //disable save and cancel buttons
}