按钮处理2个不同按钮的相同事件,具体取决于单击哪个按钮

时间:2011-06-13 07:14:26

标签: c# wpf events buttonclick

我正在开发这个UI,它有3个按钮。

  1. 删除
  2. referesh process
  3. 保存
  4. 用户从数据网格中选择行并单击任意2个按钮,即删除或刷新过程,但除非用户按下保存按钮,否则更改不会保存到数据库中。

    我想要删除和刷新过程有相同的保存按钮,具体取决于用户点击了哪个按钮,UI将调用存储过程。

    该应用程序位于C#,WPF。

    请告诉我如何处理此建议或其他建议。

3 个答案:

答案 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字段。