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""> </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""> </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""> </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