Author: igorz
Date: 2007-01-03 08:10:26 -0500 (Wed, 03 Jan 2007)
New Revision: 70421
Modified:
trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
trunk/mcs/class/System.Web/System.Web.UI.WebControls/ListControl.cs
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ListControlTest.cs
Log:
2006-01-02 Igor Zelmanovich <[EMAIL PROTECTED]>
* ListControl.cs: fixed SelectedValue and SelectedIndex properties.
set accessor works differently in 2.0.
Modified: trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
2007-01-03 13:09:15 UTC (rev 70420)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
2007-01-03 13:10:26 UTC (rev 70421)
@@ -1,3 +1,8 @@
+2006-01-02 Igor Zelmanovich <[EMAIL PROTECTED]>
+
+ * ListControl.cs: fixed SelectedValue and SelectedIndex properties.
+ set accessor works differently in 2.0.
+
2007-01-02 Vladimir Krasnov <[EMAIL PROTECTED]>
* SqlDataSourceView.cs,ObjectDataSourceView.cs: fixed parameter merge
Modified: trunk/mcs/class/System.Web/System.Web.UI.WebControls/ListControl.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.WebControls/ListControl.cs
2007-01-03 13:09:15 UTC (rev 70420)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/ListControl.cs
2007-01-03 13:10:26 UTC (rev 70421)
@@ -60,9 +60,14 @@
#endif
private ListItemCollection items;
+#if NET_2_0
+ int _selectedIndex = -2;
+ string _selectedValue;
+#else
int saved_selected_index = -2;
string saved_selected_value;
-
+#endif
+
public ListControl () : base (HtmlTextWriterTag.Select)
{
}
@@ -193,6 +198,24 @@
return -1;
}
set {
+#if NET_2_0
+ _selectedIndex = value;
+
+ if (value < -1)
+ throw new ArgumentOutOfRangeException
("value");
+
+ if (value >= Items.Count)
+ return;
+
+ ClearSelection ();
+ if (value == -1)
+ return;
+
+ items [value].Selected = true;
+
+ /* you'd think this would be called, but noooo
*/
+ //OnSelectedIndexChanged (EventArgs.Empty);
+#else
if (items == null || items.Count == 0) {
// This will happen when assigning this
property
// before DataBind () is called on the
control.
@@ -200,13 +223,6 @@
return;
}
-#if NET_2_0
- if (value >= Items.Count) {
- ClearSelection ();
- return;
- }
-#endif
-
if (value < -1 || value >= Items.Count)
throw new ArgumentOutOfRangeException
("value");
@@ -218,6 +234,7 @@
/* you'd think this would be called, but noooo
*/
//OnSelectedIndexChanged (EventArgs.Empty);
+#endif
}
}
@@ -254,6 +271,10 @@
return Items [si].Value;
}
set {
+#if NET_2_0
+ _selectedValue = value;
+ SetSelectedValue (value);
+#else
ClearSelection ();
if (items == null || items.Count == 0) {
// This will happen when assigning this
property
@@ -272,7 +293,6 @@
}
}
-#if !NET_2_0
if (thr) {
string msg = String.Format ("Argument
value is out of range: {0}", value);
throw new ArgumentOutOfRangeException
(msg);
@@ -282,6 +302,22 @@
}
#if NET_2_0
+ bool SetSelectedValue (string value)
+ {
+ if (items != null && items.Count > 0) {
+ int count = items.Count;
+ ListItemCollection coll = Items;
+ for (int i = 0; i < count; i++) {
+ if (coll [i].Value == value) {
+ ClearSelection ();
+ coll [i].Selected = true;
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
[Themeable (false)]
[DefaultValue ("")]
[DesignerSerializationVisibility
(DesignerSerializationVisibility.Hidden)]
@@ -334,10 +370,7 @@
#if !NET_2_0
IEnumerable list = DataSourceResolver.ResolveDataSource
(DataSource, DataMember);
- if (list == null)
- return;
-
- DoDataBinding (list);
+ PerformDataBinding (list);
#endif
}
@@ -351,47 +384,72 @@
base.OnPreRender (e);
}
- void DoDataBinding (IEnumerable dataSource)
+#if NET_2_0
+ protected virtual void OnTextChanged (EventArgs e)
{
- if (dataSource != null) {
+ EventHandler handler = (EventHandler) Events
[TextChangedEvent];
+ if (handler != null)
+ handler (this, e);
+ }
+#endif
+
#if NET_2_0
- if (!AppendDataBoundItems)
+ protected internal override
#endif
- Items.Clear ();
+ void PerformDataBinding (IEnumerable dataSource)
+ {
+ if (dataSource == null)
+ return;
+#if NET_2_0
+ if (!AppendDataBoundItems)
+#endif
+ Items.Clear ();
- string format = DataTextFormatString;
- if (format == "")
- format = null;
+ string format = DataTextFormatString;
+ if (format == "")
+ format = null;
- string text_field = DataTextField;
- string value_field = DataValueField;
- ListItemCollection coll = Items;
- foreach (object container in dataSource) {
- string text;
- string val;
+ string text_field = DataTextField;
+ string value_field = DataValueField;
+ ListItemCollection coll = Items;
+ foreach (object container in dataSource) {
+ string text;
+ string val;
- text = val = null;
- if (text_field != "") {
- text =
DataBinder.GetPropertyValue (container, text_field, format);
- }
+ text = val = null;
+ if (text_field != "") {
+ text = DataBinder.GetPropertyValue
(container, text_field, format);
+ }
- if (value_field != "") {
- val =
DataBinder.GetPropertyValue (container, value_field).ToString ();
- } else if (text_field == "") {
- text = val = container.ToString
();
- if (format != null)
- text = String.Format
(format, container);
- } else if (text != null) {
- val = text;
- }
+ if (value_field != "") {
+ val = DataBinder.GetPropertyValue
(container, value_field).ToString ();
+ }
+ else if (text_field == "") {
+ text = val = container.ToString ();
+ if (format != null)
+ text = String.Format (format,
container);
+ }
+ else if (text != null) {
+ val = text;
+ }
- if (text == null)
- text = val;
+ if (text == null)
+ text = val;
- coll.Add (new ListItem (text, val));
- }
+ coll.Add (new ListItem (text, val));
}
-
+
+#if NET_2_0
+ if (!String.IsNullOrEmpty (_selectedValue)) {
+ if (!SetSelectedValue (_selectedValue))
+ throw new ArgumentOutOfRangeException
("value", String.Format ("'{0}' has a SelectedValue which is invalid because it
does not exist in the list of items.", ID));
+ if (_selectedIndex >= 0 && _selectedIndex !=
SelectedIndex)
+ throw new ArgumentException
("SelectedIndex and SelectedValue are mutually exclusive.");
+ }
+ else if (_selectedIndex >= 0) {
+ SelectedIndex = _selectedIndex;
+ }
+#else
if (saved_selected_value != null) {
SelectedValue = saved_selected_value;
if (saved_selected_index != -2 &&
saved_selected_index != SelectedIndex)
@@ -401,25 +459,10 @@
SelectedIndex = saved_selected_index;
// No need to check saved_selected_value here,
as it's done before.
}
+#endif
}
#if NET_2_0
- protected virtual void OnTextChanged (EventArgs e)
- {
- EventHandler handler = (EventHandler) Events
[TextChangedEvent];
- if (handler != null)
- handler (this, e);
- }
-
- protected internal override void PerformDataBinding
(IEnumerable dataSource)
- {
- base.PerformDataBinding (dataSource);
-
- if (dataSource == null)
- return;
- DoDataBinding (dataSource);
- }
-
[MonoTODO ("why override?")]
protected override void PerformSelect ()
{
@@ -594,3 +637,4 @@
+
Modified: trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
===================================================================
--- trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
2007-01-03 13:09:15 UTC (rev 70420)
+++ trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
2007-01-03 13:10:26 UTC (rev 70421)
@@ -1,3 +1,7 @@
+2007-01-03 Igor Zelmanovich <[EMAIL PROTECTED]>
+
+ * ListControlTest.cs: new tests were added.
+
2007-01-02 Igor Zelmanovich <[EMAIL PROTECTED]>
* DetailsViewTest.cs: new tests, removed NotWorking attribute.
Modified:
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ListControlTest.cs
===================================================================
---
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ListControlTest.cs
2007-01-03 13:09:15 UTC (rev 70420)
+++
trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ListControlTest.cs
2007-01-03 13:10:26 UTC (rev 70421)
@@ -36,10 +36,13 @@
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
+#if NET_2_0
using MonoTests.stand_alone.WebHarness;
using MonoTests.SystemWeb.Framework;
+#endif
-namespace MonoTests.System.Web.UI.WebControls {
+namespace MonoTests.System.Web.UI.WebControls
+{
public class ListControlPoker : ListControl {
@@ -182,7 +185,7 @@
[TestFixtureSetUp]
public void SetUp ()
{
-#if DOT_NET
+#if VISUAL_STUDIO
WebTest.CopyResource (GetType (),
"MonoTests.System.Web.UI.WebControls.Resources.ListControlPage.aspx",
"ListControlPage.aspx");
#else
WebTest.CopyResource (GetType (),
"ListControlPage.aspx", "ListControlPage.aspx");
@@ -681,8 +684,10 @@
list.Add (3);
p.DataSource = list;
p.SelectedIndex = 2;
+ Assert.AreEqual (-1, p.SelectedIndex, "#01");
p.DataBind ();
- Assert.AreEqual (3.ToString (), p.SelectedValue, "#01");
+ Assert.AreEqual (2, p.SelectedIndex, "#02");
+ Assert.AreEqual (3.ToString (), p.SelectedValue, "#03");
}
[Test]
@@ -713,8 +718,9 @@
// the same thing.
p.SelectedIndex = 2;
p.SelectedValue = "3";
+ Assert.AreEqual ("", p.SelectedValue, "#01");
p.DataBind ();
- Assert.AreEqual ("3", p.SelectedValue, "#01");
+ Assert.AreEqual ("3", p.SelectedValue, "#02");
}
[Test]
@@ -745,7 +751,138 @@
Assert.AreEqual (3, p.Items.Count, "#01");
}
- class Data {
+#if NET_2_0
+ [Test]
+ public void DataBinding7 () {
+ ListControlPoker p = new ListControlPoker ();
+ ArrayList list = new ArrayList ();
+ list.Add (1);
+ list.Add (2);
+ list.Add (3);
+ p.DataSource = list;
+ p.DataBind ();
+
+ p.SelectedValue = "3";
+ Assert.AreEqual (2, p.SelectedIndex, "#01");
+
+ p.DataBind ();
+ Assert.AreEqual ("3", p.SelectedValue, "#02");
+ Assert.AreEqual (2, p.SelectedIndex, "#03");
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentOutOfRangeException))]
+ public void DataBinding8 () {
+ ListControlPoker p = new ListControlPoker ();
+ ArrayList list = new ArrayList ();
+ list.Add (1);
+ list.Add (2);
+ list.Add (3);
+ p.DataSource = list;
+ p.DataBind ();
+
+ p.SelectedValue = "3";
+ Assert.AreEqual (2, p.SelectedIndex, "#01");
+
+ list = new ArrayList ();
+ list.Add (4);
+ list.Add (5);
+ list.Add (6);
+ p.DataSource = list;
+ p.DataBind ();
+ Assert.AreEqual ("3", p.SelectedValue, "#01");
+ Assert.AreEqual (2, p.SelectedIndex, "#01");
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentOutOfRangeException))]
+ public void DataBinding9 () {
+ ListControlPoker p = new ListControlPoker ();
+ ArrayList list = new ArrayList ();
+ list.Add (1);
+ list.Add (2);
+ list.Add (3);
+ p.DataSource = list;
+ p.SelectedValue = "5";
+ p.DataBind ();
+ }
+
+ [Test]
+ public void DataBinding1a () {
+ ListControlPoker p = new ListControlPoker ();
+ ArrayList list = new ArrayList ();
+ list.Add (1);
+ list.Add (2);
+ list.Add (3);
+ p.DataSource = list;
+ p.SelectedIndex = 4;
+ Assert.AreEqual (-1, p.SelectedIndex, "#01");
+ p.DataBind ();
+ Assert.AreEqual (-1, p.SelectedIndex, "#02");
+ Assert.AreEqual ("", p.SelectedValue, "#03");
+ }
+
+ [Test]
+ public void DataBinding10 () {
+ ListControlPoker p = new ListControlPoker ();
+ ArrayList list = new ArrayList ();
+ list.Add (1);
+ list.Add (2);
+ list.Add (3);
+ p.DataSource = list;
+ p.DataBind ();
+
+ p.SelectedValue = "5";
+ Assert.AreEqual ("", p.SelectedValue, "#01");
+
+ p.SelectedIndex = 4;
+ Assert.AreEqual (-1, p.SelectedIndex, "#02");
+ }
+
+ [Test]
+ public void DataBinding11 () {
+ ListControlPoker p = new ListControlPoker ();
+ ArrayList list = new ArrayList ();
+ list.Add (1);
+ list.Add (2);
+ list.Add (3);
+ p.DataSource = list;
+ p.SelectedValue = "3";
+ p.DataBind ();
+
+ p.SelectedValue = "5";
+ Assert.AreEqual ("3", p.SelectedValue, "#01");
+
+ p.SelectedIndex = 4;
+ Assert.AreEqual (2, p.SelectedIndex, "#02");
+
+ p.Items.Clear ();
+ Assert.AreEqual ("", p.SelectedValue, "#03");
+ Assert.AreEqual (-1, p.SelectedIndex, "#04");
+
+ p.Items.Add (new ListItem ("1"));
+ p.Items.Add (new ListItem ("2"));
+ p.Items.Add (new ListItem ("3"));
+ p.Items.Add (new ListItem ("4"));
+ p.Items.Add (new ListItem ("5"));
+ Assert.AreEqual ("", p.SelectedValue, "#05");
+ Assert.AreEqual (-1, p.SelectedIndex, "#06");
+
+ list = new ArrayList ();
+ list.Add (1);
+ list.Add (2);
+ list.Add (3);
+ list.Add (4);
+ list.Add (5);
+ p.DataSource = list;
+ p.DataBind ();
+ Assert.AreEqual ("5", p.SelectedValue, "#07");
+ Assert.AreEqual (4, p.SelectedIndex, "#08");
+ }
+#endif
+
+ class Data
+ {
string name;
object val;
@@ -898,3 +1035,4 @@
+
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches