我在表单上有一个DataGridView
,我已BindingList
绑定Grid
Presenter
。
public AttendancePresenter( IAttendance model, IAttendanceView view, IDataService dataService, IMessageService messageService ) : base(messageService)
{
_BindingAttendanceList = new BindingList<IAttendance>();
_View.AttendanceGrid = _BindingAttendanceList;
}
现在,当我按下Delete按钮时,我想从网格中删除所选行(并且应该在数据库上更新此更改)。我的问题是我应该如何通知Presenter
我要删除网格中的这个特定行/项目?如果演示者知道它可以从BindingList
中找到已删除的项目,并从数据库中删除相同的记录。 (在这方面可以使用ID字段AttendanceID
字段)
注意:我的View
不了解Presenter
。 View
只会根据用户操作触发事件。
private void btnDelete_Click(object sender, EventArgs e)
{
OnDeleteAttendance(sender, e);
}
编辑:我的网格包含多个列,例如AttendanceID
,EmployeeID
,Name
,InDateTime
,OutDateTime
等。我在视图中使用公共属性从Presenter设置Grid
public BindingList<IAttendance> AttendanceGrid
{
Set { dgvAttendance.DataSource = Value; };
}
答案 0 :(得分:1)
如果我正确理解您基本上要问的是如何将要删除的项目的ID
从查看传递到演示者。
有两种典型的方法可以做到:
在查看界面中创建一个属性,用于获取要删除的项目的ID
。
public int IdToDelete
{
get
{
// logic to get the id of the item you want to delete
}
}
通过这种方式,您可以在Presenter中访问要删除的项目的ID。
另一种方法是扩展EventArgs
类并添加另一个属性来存储项目的ID,但我认为传递单个值会有点过分。