我正在开发这个 UI,它有 3 个按钮。
- 删除
- 参考过程
- 节省
用户从数据网格中选择行并单击两个按钮中的任何一个,即删除或刷新过程,但除非用户按下保存按钮,否则更改不会保存到数据库中。
我正在考虑为删除和刷新过程使用相同的保存按钮,这取决于用户单击了哪个按钮,UI 将调用存储的过程。
该应用程序位于 C#、WPF 上。
请给我一些想法,我该如何处理这个或其他一些建议。
我正在开发这个 UI,它有 3 个按钮。
用户从数据网格中选择行并单击两个按钮中的任何一个,即删除或刷新过程,但除非用户按下保存按钮,否则更改不会保存到数据库中。
我正在考虑为删除和刷新过程使用相同的保存按钮,这取决于用户单击了哪个按钮,UI 将调用存储的过程。
该应用程序位于 C#、WPF 上。
请给我一些想法,我该如何处理这个或其他一些建议。
假设您有选定的行。你可以有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;
On delete button 事件处理程序一样
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
}
最简单的方法是只存储单击了哪个按钮和选择了哪一行,并在 Save 处理程序中处理这些数据。单击删除或刷新将覆盖两个标志(whichButton 和 gridRow)。根据 whichButton 的值,您的 Save 处理程序然后执行适当的逻辑。
这意味着您只能保存一个更改,这就是您所说的......
如果您希望能够将更多行更改排队,那么您需要将上面的两个标志存储在一个容器中,并在 Save 处理程序中一一处理条目。想想如果将同一行添加到容器中以进行刷新和删除会发生什么...
取决于你有什么作为网格的数据源。如果后端支持工作单元(如 EF 或 NHibernate),那么您直接更改数据,并且当您在上下文上调用 Save 时,上下文将解析更改及其顺序。
如果您使用一些对象的绑定列表作为数据源(视图模型,强烈推荐用于 WPF 应用程序),那么您应该向 ViewModel 添加一个新字段ChangeType = ChangeType.RefreshProcess or ChangeType.Deleted
,然后在保存时根据 Changed 字段处理操作。