merge r96555:96556
authorIgor Zelmanovich <igorz@mono-cvs.ximian.com>
Mon, 25 Feb 2008 14:49:45 +0000 (14:49 -0000)
committerIgor Zelmanovich <igorz@mono-cvs.ximian.com>
Mon, 25 Feb 2008 14:49:45 +0000 (14:49 -0000)
svn path=/branches/mainsoft/gh2.2/mcs/; revision=96558

mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/System.Web.UI.WebControls/GridView.cs

index 39808863245eb3050acb3ab3cc2ebbc61fac59e9..5d3450b6b00b601b42697629ae6c34047da107b0 100644 (file)
@@ -1,3 +1,10 @@
+2008-02-25 Igor Zelmanovich <igorz@mainsoft.com>
+
+       * GridView.cs:
+       at Update and Delete use not read only coppies of dictionaries
+       in event argumens, that allows user to change them before corresponding
+       DataSource's method is called.
+
 2008-01-23  Vladimir Krasnov  <vladimirk@mainsoft.com>
 
        * CheckBox.cs: fiexed RenderInput, should not render RenderInput on
index f504d0cb27e7cf93e4eb0c8fefc46c1b404c7bb3..bf3daef671ba7734b5ac521d5acd38d5e4d0744e 100644 (file)
@@ -1847,9 +1847,8 @@ namespace System.Web.UI.WebControls
                        if (causesValidation && Page != null && !Page.IsValid)
                                return;
 
-                       currentEditOldValues = OldEditValues.Values;
-
-                       currentEditRowKeys = DataKeys [rowIndex].Values;
+                       currentEditOldValues = CopyOrderedDictionary (OldEditValues.Values);
+                       currentEditRowKeys = CopyOrderedDictionary (DataKeys [rowIndex].Values);
                        currentEditNewValues = GetRowValues (row, false, false);
                        
                        GridViewUpdateEventArgs args = new GridViewUpdateEventArgs (rowIndex, currentEditRowKeys, currentEditOldValues, currentEditNewValues);
@@ -1864,6 +1863,14 @@ namespace System.Web.UI.WebControls
                        view.Update (currentEditRowKeys, currentEditNewValues, currentEditOldValues, new DataSourceViewOperationCallback (UpdateCallback));
                }
 
+               static IOrderedDictionary CopyOrderedDictionary (IOrderedDictionary sourceDic) {
+                       OrderedDictionary copyDic = new OrderedDictionary ();
+                       foreach (object key in sourceDic.Keys) {
+                               copyDic.Add (key, sourceDic [key]);
+                       }
+                       return copyDic;
+               }
+
                bool UpdateCallback (int recordsAffected, Exception exception)
                {
                        GridViewUpdatedEventArgs dargs = new GridViewUpdatedEventArgs (recordsAffected, exception, currentEditRowKeys, currentEditOldValues, currentEditNewValues);
@@ -1878,7 +1885,7 @@ namespace System.Web.UI.WebControls
                public virtual void DeleteRow (int rowIndex)
                {
                        GridViewRow row = Rows [rowIndex];
-                       currentEditRowKeys = DataKeys [rowIndex].Values;
+                       currentEditRowKeys = CopyOrderedDictionary (DataKeys [rowIndex].Values);
                        currentEditNewValues = GetRowValues (row, true, true);
                        
                        GridViewDeleteEventArgs args = new GridViewDeleteEventArgs (rowIndex, currentEditRowKeys, currentEditNewValues);