как реализовать операцию отмены в datagridview - PullRequest
0 голосов
/ 26 октября 2009

Я создал одно приложение в c # .net. С помощью этого приложения мы можем обновить datagridview, теперь мне нужно реализовать отмену в нем, плз, дай мне несколько идей.

 private void button29_Click(object sender, EventArgs e)
    {

           Datatable dt;
          dt.RejectChanges();


    }

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

Ответы [ 2 ]

3 голосов
/ 09 июня 2010

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

скажем, в вашей таблице есть два столбца: int c1 и varchar c2. Просто для намека, вот несколько примеров классов.

struct ColData{
 int c1;
 string c2;
};

class Action {
 public abstract bool Undo(){}
 public abstract bool Redo(){}
}

class AddAction : Action{
 ColData data;
 public AddAction(ColData d){data = d;}
 public override bool Undo(){
     //remove the row
     //identify it with info from local field 'data'
 }
 public override bool Redo(){
     //add the row with info from local field 'data'
 }

}
//other actions like Delete, Update

И так далее для всех других действий. Для редактирования действий вам может понадобиться два набора значений столбцов: старый и новый, чтобы вы могли повторить изменение туда и обратно. Каждый раз, когда у вас есть изменения, вы помещаете соответствующее Действие в стек действий. Когда вас попросят отменить, вы извлекаете его из стека отмены, вызываете метод Undo и помещаете его в стек повторного выполнения. Если вас попросили повторить какое-либо действие, вы выскользнули из стека повторов, вызвали Redo и нажали, чтобы отменить стек. Когда у вас есть другое новое действие, вы должны очистить свой стек повторного выполнения и перенести новое действие в стек отмены.

1 голос
/ 26 октября 2009

Чтобы получить более тонкую отмену, вы можете использовать RejectChanges() на уровне DataRow. Я не помню, чтобы в DataTable сохранялась последовательность изменений (зачем это нужно), поэтому вам придется настроить свой собственный список (стек lifo) 'RowChanges'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...