From 43707daedd5ccf7c0820fc94483fc83b21652d9a Mon Sep 17 00:00:00 2001 From: Gonzalo Paniagua Javier Date: Thu, 6 Oct 2005 07:47:04 +0000 Subject: [PATCH] 2005-10-06 Gonzalo Paniagua Javier * DataGrid.cs: change the ListItemType for the item selected, set SelectedIndex before calling OnSelectedIndexChanged and set the selected item type correctly when creating the columns. Fixes bug #76334. * ButtonColumn.cs: * EditCommandColumn.cs: use a ForeColorLinkbutton, otherwise when selecting the row, the button keep the regular link color. * DataGridColumn.cs: made the class internal. svn path=/trunk/mcs/; revision=51320 --- .../System.Web.UI.WebControls/ButtonColumn.cs | 2 +- .../System.Web.UI.WebControls/ChangeLog | 12 ++++++ .../System.Web.UI.WebControls/DataGrid.cs | 42 ++++++++++++++++++- .../DataGridColumn.cs | 2 +- .../EditCommandColumn.cs | 2 +- 5 files changed, 55 insertions(+), 5 deletions(-) diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ButtonColumn.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ButtonColumn.cs index b4423cf21c0..6174befa596 100644 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ButtonColumn.cs +++ b/mcs/class/System.Web/System.Web.UI.WebControls/ButtonColumn.cs @@ -175,7 +175,7 @@ namespace System.Web.UI.WebControls { switch (ButtonType) { case ButtonColumnType.LinkButton: { - LinkButton butt = new LinkButton (); + LinkButton butt = new ForeColorLinkButton (); butt.Text = Text; butt.CommandName = CommandName; diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog b/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog index dbd6cd14672..9dc6195a4e5 100644 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog +++ b/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog @@ -1,3 +1,15 @@ +2005-10-06 Gonzalo Paniagua Javier + + * DataGrid.cs: change the ListItemType for the item selected, set + SelectedIndex before calling OnSelectedIndexChanged and set the selected + item type correctly when creating the columns. Fixes bug #76334. + + * ButtonColumn.cs: + * EditCommandColumn.cs: use a ForeColorLinkbutton, otherwise when + selecting the row, the button keep the regular link color. + + * DataGridColumn.cs: made the class internal. + 2005-10-04 Gonzalo Paniagua Javier * DataGrid.cs: fix breakaga of alternating item style in one of my diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataGrid.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataGrid.cs index d8ea5303e36..0d9dba41f85 100644 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataGrid.cs +++ b/mcs/class/System.Web/System.Web.UI.WebControls/DataGrid.cs @@ -186,6 +186,37 @@ namespace System.Web.UI.WebControls { } } + void AdjustItemTypes (int prev_select, int new_select) + { + if (items_list == null) + return; // nothing to select + + int count = items_list.Count; + if (count == 0) + return; // nothing to select + + DataGridItem item; + // Restore item type for the previously selected one. + if (prev_select >= 0 && prev_select < count) { + item = (DataGridItem) items_list [prev_select]; + + if (item.ItemType == ListItemType.EditItem) { + // nothing to do. This has priority. + } else if ((item.ItemIndex % 2) != 0) { + item.SetItemType (ListItemType.AlternatingItem); + } else { + item.SetItemType (ListItemType.Item); + } + } + + if (new_select == -1 || new_select >= count) + return; // nothing to select + + item = (DataGridItem) items_list [new_select]; + if (item.ItemType != ListItemType.EditItem) // EditItem takes precedence + item.SetItemType (ListItemType.SelectedItem); + } + [Bindable(true)] [DefaultValue(-1)] [WebSysDescription ("")] @@ -195,6 +226,9 @@ namespace System.Web.UI.WebControls { set { if (value < -1) throw new ArgumentOutOfRangeException ("value"); + + int selected_index = ViewState.GetInt ("SelectedIndex", -1); + AdjustItemTypes (selected_index, value); ViewState ["SelectedIndex"] = value; } } @@ -913,6 +947,8 @@ namespace System.Web.UI.WebControls { int index = 0; bool first = true; string key = null; + int selected_index = SelectedIndex; + int edit_item_index = EditItemIndex; while (enumerator != null && (skip_first || enumerator.MoveNext ())) { // MS does not render
on empty datasource. if (first) { @@ -931,9 +967,10 @@ namespace System.Web.UI.WebControls { keys.Add (DataBinder.GetPropertyValue (data, key)); ListItemType type = ListItemType.Item; - - if (this.EditItemIndex == index) + if (index == edit_item_index) type = ListItemType.EditItem; + else if (index == selected_index) + type = ListItemType.SelectedItem; else if (index % 2 != 0) type = ListItemType.AlternatingItem; @@ -1077,6 +1114,7 @@ namespace System.Web.UI.WebControls { } else if (String.Compare (cn, EditCommandName, true, inv) == 0) { OnEditCommand (de); } else if (String.Compare (cn, SelectCommandName, true, inv) == 0) { + SelectedIndex = de.Item.ItemIndex; OnSelectedIndexChanged (de); } else if (String.Compare (cn, SortCommandName, true, inv) == 0) { DataGridSortCommandEventArgs se = new DataGridSortCommandEventArgs (de.CommandSource, de); diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridColumn.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataGridColumn.cs index 095291afbad..0db64c077f9 100644 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridColumn.cs +++ b/mcs/class/System.Web/System.Web.UI.WebControls/DataGridColumn.cs @@ -193,7 +193,7 @@ namespace System.Web.UI.WebControls { } } - class ForeColorLinkButton : LinkButton { + internal class ForeColorLinkButton : LinkButton { Color GetForeColor (WebControl control) { if (control == null) diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/EditCommandColumn.cs b/mcs/class/System.Web/System.Web.UI.WebControls/EditCommandColumn.cs index 21e11d0751c..ded2f49a8bb 100644 --- a/mcs/class/System.Web/System.Web.UI.WebControls/EditCommandColumn.cs +++ b/mcs/class/System.Web/System.Web.UI.WebControls/EditCommandColumn.cs @@ -136,7 +136,7 @@ namespace System.Web.UI.WebControls { LinkButton d; if (type == ButtonColumnType.LinkButton) { - d = new LinkButton(); + d = new ForeColorLinkButton(); d.Text = text; d.CommandName = command; d.CausesValidation = valid; -- 2.25.1