2009-10-26 73 views
0

我已經在c#.net中創建了一個應用程序。使用這個應用程序我們可以更新datagridview,現在我需要在它中實現撤消,請給我一些想法。如何在datagridview中實現撤銷操作

private void button29_Click(object sender, EventArgs e) 
    { 

      Datatable dt; 
      dt.RejectChanges(); 


    } 

使用上面的代碼我可以在更新之前做撤銷。 但我需要一個撤消功能,因爲在字PLZ建議我 在此先感謝

回答

1

要獲得更微妙的撤消,您可以在DataRow級別使用RejectChanges()。我不記得DataTable保留了一系列編輯(爲什麼會這樣),所以你將不得不建立你自己的'RowChanges'列表(生命棧)。

+0

嗨,我不能得到它,因爲我是一個初學者plz tel任何其他方式 – ush 2009-10-28 06:38:29

+0

恐怕沒有其他方式,據我所知。 DataTables只是不存儲那麼多的信息。你將不得不做一些嚴肅的編程。從這裏開始:http://msdn.microsoft.com/en-us/library/w9y9a401%28VS.80%29.aspx – 2009-10-28 08:07:48

+0

非常感謝你 – ush 2009-10-28 09:14:47

3

您將不得不創建一個撤消堆棧。在數據表的每個編輯操作之後填充此堆棧,並使用足夠的信息將其撤消。然後提供一種機制以相反的方式在堆棧中執行操作。

說,你的表中有兩列,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 

等等所有其他動作。對於編輯操作,您可能需要兩組列值:舊的和新的,以便您可以前後重複更改。 每次您進行更改時,都會將相應的操作推送到操作堆棧上。當被要求撤消時,你將它從撤消堆棧中彈出,將其稱爲撤消方法,並將其推入重做堆棧。如果你被要求重做一些動作,你從重做堆棧彈出,調用重做,推動撤消堆棧。 當你有另一個新的動作時,你應該清除你的重做堆棧並將新動作推送到撤消堆棧。