Author: husted Date: Tue Nov 15 14:05:29 2005 New Revision: 344450 URL: http://svn.apache.org/viewcvs?rev=344450&view=rev Log: OVR-24 * Add workaround for an issue with the selected index for a control in a dynamic template being reset to zero between DataBinding and PreRender.
Modified: struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs Modified: struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs?rev=344450&r1=344449&r2=344450&view=diff ============================================================================== --- struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs (original) +++ struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs Tue Nov 15 14:05:29 2005 @@ -1071,16 +1071,13 @@ { if (value != null) { - foreach (ListItem i in control.Items) - i.Selected = false; - int index = 0; foreach (ListItem i in control.Items) { if (value.Equals(i.Value)) { - i.Selected = true; control.SelectedIndex = index; + continue; } index++; } @@ -1094,13 +1091,35 @@ DataGridItem container = (DataGridItem) control.NamingContainer; string key = DataBinder.Eval(container.DataItem, _DataField) as string; SelectItem(control, key); - _Control.SelectedIndex = control.SelectedIndex; + _SelectedIndex = control.SelectedIndex; // FIXME: [OVR-24] + } + + /// <summary> + /// Cache the selected index for OnPreRender. + /// </summary> + private int _SelectedIndex; + + /// <summary> + /// Kludge method to set Selected Index. + /// </summary> + /// <remarks><p> + /// After setting the selected index on DataBinding, + /// it is somehow being reset to 0 before prerender. + /// This method restores the selected index st by + /// OnDataBinding. + /// </p></remarks> + /// <param name="sender">Event source</param> + /// <param name="e">Runtime parameters</param> + private void OnPreRender(object sender, EventArgs e) + { + DropDownList control; + control = (DropDownList) sender; + control.SelectedIndex = _SelectedIndex; } public void InstantiateIn(Control container) { container.Controls.Add(_Control); - _Control.DataBinding += new EventHandler(OnDataBinding); } public DropDownListTemplate(string id, object dataSource) @@ -1110,6 +1129,8 @@ _Control.ID = id; _Control.DataSource = dataSource; _Control.DataBind(); + _Control.DataBinding += new EventHandler(OnDataBinding); + _Control.PreRender += new EventHandler(OnPreRender); } public DropDownListTemplate(string id, IKeyValueList list) @@ -1121,6 +1142,8 @@ _Control.DataTextField = "value"; _Control.DataValueField = "key"; _Control.DataBind(); + _Control.DataBinding += new EventHandler(OnDataBinding); + _Control.PreRender += new EventHandler(OnPreRender); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]