我正在开发这个UI,它有3个按钮。
用户从数据网格中选择行并单击任意2个按钮,即删除或刷新过程,但除非用户按下保存按钮,否则更改不会保存到数据库中。
我想要删除和刷新过程有相同的保存按钮,具体取决于用户点击了哪个按钮,UI将调用存储过程。
该应用程序位于C#,WPF。
请告诉我如何处理此建议或其他建议。
答案 0 :(得分:0)
假设您有选定的行。你可以拥有global boolean variable isDeleteClicked
。当用户单击删除按钮时,在其事件处理程序中,您可以设置isDeleteClicked = true;
当用户单击刷新进程按钮时,在该按钮事件处理程序中,您可以执行isDeleteClicked = false;
单击保存按钮时,在其事件中你可以做的处理程序
if(isDeleteClicked)
{
//call SP for delete work
}
else
{
//call SP for refresh work
}
或者另一个选项可能是创建一个枚举,例如三个值。
public enum OperationSelected
{
DeleteClicked,
RefreshProcessClicked,
NoneClicked
}
创建一个全局枚举变量opSelected,如OperationSelected opSelected = OperationSelected.NoneClicked;
在删除按钮事件处理程序上执行
opSelected = OperationSelected.DeleteClicked;
在刷新过程按钮事件处理程序上执行
opSelected = OperationSelected.RefreshProcessClicked;
在保存按钮事件处理程序上执行
if (opSelected.ToString() == OperationSelected.DeleteClicked.ToString())
{
//call SP for delete work
}
else if (opSelected.ToString() == OperationSelected.RefreshProcessClicked.ToString())
{
//call SP for refresh work
}
答案 1 :(得分:0)
最简单的方法是只存储单击了哪个按钮以及选择了哪一行,并在“保存”处理程序中处理此数据。 单击“删除”或“刷新”将覆盖两个标志(whichButton和gridRow)。根据其值,您的Save处理程序然后执行相应的逻辑。
这意味着您只能保存一个更改,这就是您所说的......
如果您希望能够排队更多行更改,则需要将上面的两个标志存储在容器中,并在“保存”处理程序中逐个处理这些条目。想想如果将同一行添加到容器中以进行刷新和删除...
会发生什么答案 2 :(得分:0)
取决于您拥有什么作为网格的数据源。如果后端支持工作单元(如EF或NHibernate),则直接更改数据,当您在上下文中调用Save时,上下文将解析更改及其顺序。
如果您使用某些对象的绑定列表作为数据源(视图模型,强烈建议用于WPF应用程序),那么您应该向ViewModel ChangeType = ChangeType.RefreshProcess or ChangeType.Deleted
添加一个新字段,然后再保存您的流程操作基于Changed字段。