Кнопка, обрабатывающая одно и то же событие для 2 разных кнопок в зависимости от того, какая из них нажата - PullRequest
0 голосов
/ 13 июня 2011

Я разрабатываю этот интерфейс, который имеет 3 кнопки.

  1. удалить
  2. процесс обновления
  3. сохранение

пользователь выбирает строку в сетке данных и нажимает любую из 2 кнопок, то есть процесс удаления или обновления, но до тех пор, пока пользователь не нажмет кнопку сохранения, изменения не сохранятся в базе данных.

Я думал, что у меня будет одна и та же кнопка сохранения для процесса удаления и обновления, в зависимости от того, на какую кнопку нажал пользователь, пользовательский интерфейс вызовет сохраненные процессы.

Приложение на C #, WPF.

Пожалуйста, дайте мне некоторое представление о том, как я могу справиться с этим или другим предложением.

Ответы [ 3 ]

0 голосов
/ 13 июня 2011

Самый простой способ - просто сохранить, какая кнопка была нажата и какая строка была выбрана, и обработать эти данные в обработчике Сохранить.Нажатие «Удалить» или «Обновить» заменит два флага (whichButton и gridRow).Основываясь на значении whichButton, ваш обработчик Save затем выполняет соответствующую логику.

Это означает, что вы можете сохранить только одно изменение, как вы, похоже, говорите ...

Если вы хотитеиметь возможность ставить в очередь больше изменений строк, тогда вам нужно хранить два указанных выше флага в контейнере и обрабатывать записи одну за другой в обработчике сохранения.Подумайте, что произойдет, если в контейнер будет добавлена ​​одна и та же строка как для обновления, так и для удаления ...

0 голосов
/ 13 июня 2011

Зависит от того, что у вас есть в качестве источника данных для сетки.Если бэкэнд поддерживает Unit of work (например, EF или NHibernate), то вы изменяете данные напрямую, и контекст разрешает изменения и их порядок, когда вы вызываете Save для контекста.

Если вы используете какой-либо связанный список объектов в качестве источника данных (модель представления, настоятельно рекомендуется для приложения WPF), то вам следует добавить новое поле в ViewModel ChangeType = ChangeType.RefreshProcess or ChangeType.Deleted, а затем в разделе Сохранить процессдействия на основе поля Изменено.

0 голосов
/ 13 июня 2011

Предполагая, что у вас есть выбранная строка с вами. Вы могли бы иметь 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;

При обновлении обработчик события кнопки процесса do

opSelected = OperationSelected.RefreshProcessClicked;

При нажатии кнопки Сохранить обработчик события do

    if (opSelected.ToString() == OperationSelected.DeleteClicked.ToString())
    {
    //call SP for delete work
    }
    else  if (opSelected.ToString() == OperationSelected.RefreshProcessClicked.ToString())
    {
    //call SP for refresh work
    }
...