Author: igorz
Date: 2006-12-11 07:37:59 -0500 (Mon, 11 Dec 2006)
New Revision: 69315

Added:
   
trunk/mcs/class/System.Web/Test/mainsoft/NunitWebResources/GridViewUpdate.aspx
Modified:
   trunk/mcs/class/System.Web/Makefile
   trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
   
trunk/mcs/class/System.Web/System.Web.UI.WebControls/CompositeDataBoundControl.cs
   trunk/mcs/class/System.Web/System.Web.UI.WebControls/GridView.cs
   trunk/mcs/class/System.Web/System.Web.UI.WebControls/TemplateField.cs
   trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
   trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/GridViewTest.cs
Log:
2006-12-11 Igor Zelmanovich <[EMAIL PROTECTED]>

        * GridView.cs: fixed: Update works not only for EditRow
        * TemplateField.cs:
        * CompositeDataBoundControl.cs:         



Modified: trunk/mcs/class/System.Web/Makefile
===================================================================
--- trunk/mcs/class/System.Web/Makefile 2006-12-11 12:37:25 UTC (rev 69314)
+++ trunk/mcs/class/System.Web/Makefile 2006-12-11 12:37:59 UTC (rev 69315)
@@ -98,6 +98,7 @@
        Test/mainsoft/NunitWebResources/Bluehills.jpg \
        Test/mainsoft/NunitWebResources/FormViewTest1.aspx \
        Test/mainsoft/NunitWebResources/FormViewInsertEditDelete.aspx \
+       Test/mainsoft/NunitWebResources/GridViewUpdate.aspx \
        Test/mainsoft/NunitWebResources/XMLDataSourceTest.xml \
        Test/mainsoft/NunitWebResources/XMLDataSourceTest.xsl \
        Test/mainsoft/NunitWebResources/XMLDataSourceTest1.aspx \

Modified: trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog      
2006-12-11 12:37:25 UTC (rev 69314)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog      
2006-12-11 12:37:59 UTC (rev 69315)
@@ -1,5 +1,11 @@
 2006-12-11 Igor Zelmanovich <[EMAIL PROTECTED]>
 
+       * GridView.cs: fixed: Update works not only for EditRow
+       * TemplateField.cs:
+       * CompositeDataBoundControl.cs:         
+
+2006-12-11 Igor Zelmanovich <[EMAIL PROTECTED]>
+
        * RadioButton.cs: fixed:
        When GroupName is not defined UniqueID is used instead for name 
attribute.
        CheckedChanged is raised only when control is checked.

Modified: 
trunk/mcs/class/System.Web/System.Web.UI.WebControls/CompositeDataBoundControl.cs
===================================================================
--- 
trunk/mcs/class/System.Web/System.Web.UI.WebControls/CompositeDataBoundControl.cs
   2006-12-11 12:37:25 UTC (rev 69314)
+++ 
trunk/mcs/class/System.Web/System.Web.UI.WebControls/CompositeDataBoundControl.cs
   2006-12-11 12:37:59 UTC (rev 69315)
@@ -55,6 +55,7 @@
 
                        object itemCount = ViewState ["_ItemCount"];
                        if (itemCount != null) {
+                               RequiresDataBinding = false;
                                object [] data = new object [(int) itemCount];
                                ViewState ["_ItemCount"] = CreateChildControls 
(data, false);
                        }

Modified: trunk/mcs/class/System.Web/System.Web.UI.WebControls/GridView.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.WebControls/GridView.cs    
2006-12-11 12:37:25 UTC (rev 69314)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/GridView.cs    
2006-12-11 12:37:59 UTC (rev 69315)
@@ -1376,9 +1376,9 @@
                                PropertyDescriptorCollection props = 
TypeDescriptor.GetProperties (row.DataItem);
                                cachedKeyProperties = new PropertyDescriptor 
[DataKeyNames.Length];
                                for (int n=0; n<DataKeyNames.Length; n++) { 
-                                       PropertyDescriptor p = props 
[DataKeyNames[n]];
+                                       PropertyDescriptor p = props.Find 
(DataKeyNames [n], true);
                                        if (p == null)
-                                               new InvalidOperationException 
("Property '" + DataKeyNames[n] + "' not found in object of type " + 
row.DataItem.GetType());
+                                               throw new 
InvalidOperationException ("Property '" + DataKeyNames [n] + "' not found in 
object of type " + row.DataItem.GetType ());
                                        cachedKeyProperties [n] = p;
                                }
                        }
@@ -1612,7 +1612,8 @@
                                break;
                                        
                        case DataControlCommands.UpdateCommandName:
-                               UpdateRow (EditIndex, true);
+                               int editIndex = int.Parse (param);
+                               UpdateRow (Rows [editIndex], editIndex, true);
                                break;
                                        
                        case DataControlCommands.CancelCommandName:
@@ -1696,18 +1697,23 @@
                [MonoTODO ("Support two-way binding expressions")]
                public virtual void UpdateRow (int rowIndex, bool 
causesValidation)
                {
+                       if (rowIndex != EditIndex) throw new 
NotSupportedException ();
+                       
+                       GridViewRow row = Rows [rowIndex];
+                       UpdateRow (row, rowIndex, causesValidation);
+               }
+
+               void UpdateRow (GridViewRow row, int rowIndex, bool 
causesValidation)
+               {
                        if (causesValidation && Page != null)
                                Page.Validate ();
-                       
-                       if (rowIndex != EditIndex) throw new 
NotSupportedException ();
 
                        currentEditOldValues = OldEditValues.Values;
 
-                       GridViewRow row = Rows [rowIndex];
                        currentEditRowKeys = DataKeys [rowIndex].Values;
                        currentEditNewValues = GetRowValues (row, false, false);
                        
-                       GridViewUpdateEventArgs args = new 
GridViewUpdateEventArgs (EditIndex, currentEditRowKeys, currentEditOldValues, 
currentEditNewValues);
+                       GridViewUpdateEventArgs args = new 
GridViewUpdateEventArgs (rowIndex, currentEditRowKeys, currentEditOldValues, 
currentEditNewValues);
                        OnRowUpdating (args);
                        if (!args.Cancel) {
                                DataSourceView view = GetData ();

Modified: trunk/mcs/class/System.Web/System.Web.UI.WebControls/TemplateField.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.WebControls/TemplateField.cs       
2006-12-11 12:37:25 UTC (rev 69314)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/TemplateField.cs       
2006-12-11 12:37:59 UTC (rev 69315)
@@ -161,8 +161,10 @@
                                bt = insertItemTemplate as IBindableTemplate; 
                        else if ((rowState & DataControlRowState.Edit) != 0)
                                bt = editItemTemplate as IBindableTemplate;
+                       else if (alternatingItemTemplate !=null && (rowState & 
DataControlRowState.Alternate) != 0)
+                               bt = alternatingItemTemplate as 
IBindableTemplate;
                        else
-                               return;
+                               bt = itemTemplate as IBindableTemplate;
                        
                        if (bt != null) {
                                IOrderedDictionary values = bt.ExtractValues 
(cell);

Modified: trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
===================================================================
--- trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog 
2006-12-11 12:37:25 UTC (rev 69314)
+++ trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog 
2006-12-11 12:37:59 UTC (rev 69315)
@@ -1,5 +1,9 @@
 2006-12-11  Igor Zelmanovich   <[EMAIL PROTECTED]>
 
+       * GridViewTest.cs:  added tests.
+
+2006-12-11  Igor Zelmanovich   <[EMAIL PROTECTED]>
+
        * GridViewTest.cs: fixed tests, removed NotWorking attribute.
 
 2006-12-11  Igor Zelmanovich   <[EMAIL PROTECTED]>

Modified: 
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/GridViewTest.cs
===================================================================
--- trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/GridViewTest.cs   
2006-12-11 12:37:25 UTC (rev 69314)
+++ trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/GridViewTest.cs   
2006-12-11 12:37:59 UTC (rev 69315)
@@ -337,6 +337,52 @@
                        public static int GetCount () {
                                return GetList ().Count;
                        }
+               }
+               
+               public class data
+               {
+                       private static ArrayList _data = new ArrayList ();
+
+                       static data () {
+                               _data.Add (new DataItem (1, "heh1"));
+                               _data.Add (new DataItem (2, "heh2"));
+                       }
+
+                       public data () {
+                       }
+
+                       public ArrayList GetAllItems () {
+                               return _data;
+                       }
+
+                       public void UpdateItem (int id, string name) {
+                               foreach (DataItem i in _data) {
+                                       if (i.ID == id) {
+                                               i.Name = name;
+                                               return;
+                                       }
+                               }
+                       }
+               }
+
+               public class DataItem
+               {
+                       int _id = 0;
+                       string _name = "";
+
+                       public DataItem (int id, string name) {
+                               _id = id;
+                               _name = name;
+                       }
+
+                       public int ID {
+                               get { return _id; }
+                       }
+
+                       public string Name {
+                               get { return _name; }
+                               set { _name = value; }
+                       }
                }
 
                public const string BOOLFIELD = "bool";
@@ -352,7 +398,12 @@
                        myds.Add ("France");
                        myds.Add ("Italy");
                        myds.Add ("Israel");
-                       myds.Add ("Russia");
+                       myds.Add ("Russia");
+#if DOT_NET
+                       WebTest.CopyResource (GetType (), 
"MonoTests.System.Web.UI.WebControls.Resources.GridViewUpdate.aspx", 
"GridViewUpdate.aspx");
+#else
+                       WebTest.CopyResource (GetType (), 
"GridViewUpdate.aspx", "GridViewUpdate.aspx");
+#endif
                }
 
                [Test]
@@ -2336,6 +2387,116 @@
                {
                        PokerGridView g = new PokerGridView ();
                        object o = g.SelectedValue;
+               }
+
+               [Test]
+               [Category ("NunitWeb")]
+               [Category ("NotDotNet")]
+               public void GridViewUpdate () {
+                       WebTest t = new WebTest ("GridViewUpdate.aspx");
+                       string pageHTML = HtmlDiff.GetControlFromPageHtml 
(t.Run ());
+                       
+                       FormRequest fr = new FormRequest (t.Response, "form1");
+                       fr.Controls.Add ("__EVENTTARGET");
+                       fr.Controls.Add ("__EVENTARGUMENT");
+                       fr.Controls.Add ("GridView1:_ctl2:Name"); // for .NET 
use "GridView1$ctl02$Name"
+                       fr.Controls.Add ("GridView1:_ctl3:Name");
+                       fr.Controls ["__EVENTTARGET"].Value = "Button1";
+                       fr.Controls ["__EVENTARGUMENT"].Value = "";
+                       fr.Controls ["GridView1:_ctl2:Name"].Value = "ABC";
+                       fr.Controls ["GridView1:_ctl3:Name"].Value = "123";
+                       t.Request = fr;
+                       t.Invoker = PageInvoker.CreateOnLoad 
(GridView_postback);
+                       pageHTML = HtmlDiff.GetControlFromPageHtml (t.Run ());
+                       #region original
+                       string original = @"<div>
+       <table cellspacing=""0"" rules=""all"" border=""1"" id=""GridView1"" 
style=""border-collapse:collapse;"">
+               <tr>
+                       <th scope=""col"">ID</th><th scope=""col"">&nbsp;</th>
+               </tr><tr>
+                       <td>1</td><td>
+                        <input name=""GridView1$ctl02$Name"" type=""text"" 
value=""ABC"" id=""GridView1_ctl02_Name"" />
+                        <input type=""button"" name=""GridView1$ctl02$b1"" 
value=""upd"" onclick=""javascript:__doPostBack('GridView1$ctl02$b1','')"" 
id=""GridView1_ctl02_b1"" />
+                    </td>
+               </tr><tr>
+                       <td>2</td><td>
+                        <input name=""GridView1$ctl03$Name"" type=""text"" 
value=""123"" id=""GridView1_ctl03_Name"" />
+                        <input type=""button"" name=""GridView1$ctl03$b1"" 
value=""upd"" onclick=""javascript:__doPostBack('GridView1$ctl03$b1','')"" 
id=""GridView1_ctl03_b1"" />
+                    </td>
+               </tr>
+       </table>
+</div>";
+
+                       #endregion                      
+                       HtmlDiff.AssertAreEqual (original, pageHTML, 
"GridViewUpdate #1");
+
+                       fr = new FormRequest (t.Response, "form1");
+                       fr.Controls.Add ("__EVENTTARGET");
+                       fr.Controls.Add ("__EVENTARGUMENT");
+                       fr.Controls.Add ("GridView1:_ctl2:Name");
+                       fr.Controls.Add ("GridView1:_ctl3:Name");
+                       fr.Controls ["__EVENTTARGET"].Value = 
"GridView1:_ctl2:b1";
+                       fr.Controls ["__EVENTARGUMENT"].Value = "";
+                       fr.Controls ["GridView1:_ctl2:Name"].Value = "ABC";
+                       fr.Controls ["GridView1:_ctl3:Name"].Value = "123";
+                       t.Request = fr;
+                       t.Invoker = PageInvoker.CreateOnLoad 
(GridView_postback);
+                       pageHTML = HtmlDiff.GetControlFromPageHtml (t.Run ());
+                       #region original
+                       original = @"<div>
+       <table cellspacing=""0"" rules=""all"" border=""1"" id=""GridView1"" 
style=""border-collapse:collapse;"">
+               <tr>
+                       <th scope=""col"">ID</th><th scope=""col"">&nbsp;</th>
+               </tr><tr>
+                       <td>1</td><td>
+                        <input name=""GridView1$ctl02$Name"" type=""text"" 
value=""ABC"" id=""GridView1_ctl02_Name"" />
+                        <input type=""button"" name=""GridView1$ctl02$b1"" 
value=""upd"" onclick=""javascript:__doPostBack('GridView1$ctl02$b1','')"" 
id=""GridView1_ctl02_b1"" />
+                    </td>
+               </tr><tr>
+                       <td>2</td><td>
+                        <input name=""GridView1$ctl03$Name"" type=""text"" 
value=""heh2"" id=""GridView1_ctl03_Name"" />
+                        <input type=""button"" name=""GridView1$ctl03$b1"" 
value=""upd"" onclick=""javascript:__doPostBack('GridView1$ctl03$b1','')"" 
id=""GridView1_ctl03_b1"" />
+                    </td>
+               </tr>
+       </table>
+</div>";
+
+                       #endregion
+                       HtmlDiff.AssertAreEqual (original, pageHTML, 
"GridViewUpdate #2");
+
+                       fr = new FormRequest (t.Response, "form1");
+                       fr.Controls.Add ("__EVENTTARGET");
+                       fr.Controls.Add ("__EVENTARGUMENT");
+                       fr.Controls.Add ("GridView1:_ctl2:Name");
+                       fr.Controls.Add ("GridView1:_ctl3:Name");
+                       fr.Controls ["__EVENTTARGET"].Value = 
"GridView1:_ctl3:b1";
+                       fr.Controls ["__EVENTARGUMENT"].Value = "";
+                       fr.Controls ["GridView1:_ctl2:Name"].Value = "ABC";
+                       fr.Controls ["GridView1:_ctl3:Name"].Value = "123";
+                       t.Request = fr;
+                       t.Invoker = PageInvoker.CreateOnLoad 
(GridView_postback);
+                       pageHTML = HtmlDiff.GetControlFromPageHtml (t.Run ());
+                       #region original
+                       original = @"<div>
+       <table cellspacing=""0"" rules=""all"" border=""1"" id=""GridView1"" 
style=""border-collapse:collapse;"">
+               <tr>
+                       <th scope=""col"">ID</th><th scope=""col"">&nbsp;</th>
+               </tr><tr>
+                       <td>1</td><td>
+                        <input name=""GridView1$ctl02$Name"" type=""text"" 
value=""ABC"" id=""GridView1_ctl02_Name"" />
+                        <input type=""button"" name=""GridView1$ctl02$b1"" 
value=""upd"" onclick=""javascript:__doPostBack('GridView1$ctl02$b1','')"" 
id=""GridView1_ctl02_b1"" />
+                    </td>
+               </tr><tr>
+                       <td>2</td><td>
+                        <input name=""GridView1$ctl03$Name"" type=""text"" 
value=""123"" id=""GridView1_ctl03_Name"" />
+                        <input type=""button"" name=""GridView1$ctl03$b1"" 
value=""upd"" onclick=""javascript:__doPostBack('GridView1$ctl03$b1','')"" 
id=""GridView1_ctl03_b1"" />
+                    </td>
+               </tr>
+       </table>
+</div>";
+
+                       #endregion
+                       HtmlDiff.AssertAreEqual (original, pageHTML, 
"GridViewUpdate #3");
                }
 
         [TestFixtureTearDown]

Added: 
trunk/mcs/class/System.Web/Test/mainsoft/NunitWebResources/GridViewUpdate.aspx
===================================================================
--- 
trunk/mcs/class/System.Web/Test/mainsoft/NunitWebResources/GridViewUpdate.aspx  
    2006-12-11 12:37:25 UTC (rev 69314)
+++ 
trunk/mcs/class/System.Web/Test/mainsoft/NunitWebResources/GridViewUpdate.aspx  
    2006-12-11 12:37:59 UTC (rev 69315)
@@ -0,0 +1,38 @@
+<%@ Page Language="C#" AutoEventWireup="true" %>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+
+<html xmlns="http://www.w3.org/1999/xhtml"; >
+<head id="Head1" runat="server">
+    <title>Untitled Page</title>
+</head>
+<body>
+    <form id="form1" runat="server">
+    <div><%= MonoTests.stand_alone.WebHarness.HtmlDiff.BEGIN_TAG %>
+        <asp:GridView ID="GridView1" runat="server" 
DataSourceID="ObjectDataSource1" AutoGenerateColumns="false" DataKeyNames="id">
+            <Columns>
+                <asp:BoundField DataField="id" HeaderText="ID" />
+                <asp:TemplateField>
+                    <ItemTemplate>
+                        <asp:TextBox ID="Name" runat="server" Text='<%# 
Bind("name") %>'></asp:TextBox>
+                        <asp:Button ID="b1" runat="server" 
CommandName="Update" Text="upd" UseSubmitBehavior="false"/>
+                    </ItemTemplate>
+                    <AlternatingItemTemplate>
+                        <asp:TextBox ID="Name" runat="server" Text='<%# 
Bind("name") %>'></asp:TextBox>
+                        <asp:Button ID="b1" runat="server" 
CommandName="Update" Text="upd" UseSubmitBehavior="false"/>
+                    </AlternatingItemTemplate>
+                </asp:TemplateField>
+                
+            </Columns>
+        </asp:GridView><%= MonoTests.stand_alone.WebHarness.HtmlDiff.END_TAG %>
+        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
SelectMethod="GetAllItems"
+            TypeName="MonoTests.System.Web.UI.WebControls.GridViewTest+data" 
UpdateMethod="UpdateItem">
+            <UpdateParameters>
+                <asp:Parameter Name="id" Type="Int32" />
+                <asp:Parameter Name="name" Type="String" />
+            </UpdateParameters>
+        </asp:ObjectDataSource>
+        <asp:Button ID="Button1" runat="server" Text="Button" 
UseSubmitBehavior="false" /></div>
+    </form>
+</body>
+</html>

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to