【问题标题】:How to implement soft deletion in DataGridViewDataGridView中如何实现软删除
【发布时间】:2013-09-12 10:17:39
【问题描述】:

我有一个绑定到对象数据源的 DataGridView。该对象具有属性“IsDeleted”。当用户按下删除键,或单击删除按钮,或以其他方式删除一行时,我想设置“IsDeleted”标志而不是删除该行。 (然后我希望 datagridview 更新)。

实现这种行为我需要的单点联系是什么?

我不想尝试单独处理所有用户路径。

【问题讨论】:

  • removing 该行将由您的代码完成,所以只需删除代码吗?或者您不想再出现deleted row
  • 删除行不是由我的代码完成的 - 它是由 DataGridView 本身完成的。软删除的对象将被过滤器删除。
  • 您可以通过将AllowUserToDeleteRows 设置为false 来防止用户删除datagridview 中的任何行。
  • 但我希望他们能够删除该行,我只想更改删除的影响方式。

标签: c# winforms datagrid datagridview soft-delete


【解决方案1】:

您可以手动处理UserDeletingRowCancel 的事件,并像这样执行您自己的deletion

private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e){
   e.Cancel = true;//Cancel the actual deletion of row
   //You can just hide the row instead
   e.Row.Visible = false;
   //Then set the IsDeleted of the underlying data bound item to true
   ((YourObject)e.Row.DataBoundItem).IsDeleted = true;
}

你刚才说你的对象有一个名为IsDeleted的属性,所以我想它叫做YourObject,你必须将DataBoundItem转换为那个类型,这样你才能访问IsDeleted属性并设置它到true。就是这样。

【讨论】:

  • 谢谢;但这不会改变删除按钮的行为。
  • @DanielOfTaebl 什么delete button?删除按钮是你的还是 navigation control 的?你的意思是row 仍然被删除/移除?
  • 是的,它是默认的导航控件;默认导航控件具有这种效果。
  • @DanielOfTaebl 你用BindingNavigator吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2013-02-04
  • 2019-04-20
  • 1970-01-01
相关资源
最近更新 更多