Author: husted
Date: Wed Oct 25 06:21:04 2006
New Revision: 467633

URL: http://svn.apache.org/viewvc?view=rev&rev=467633
Log:
WQD-88 ViewHelper,GridControl: Fix Read so that numeric values can be passed 
back (e.g. count in found set). GridControl: Add View_Save event so that 
page/caller can react to state changes. Expose PageSize property. Extend 
PageSize and AllowCustomGrid to adopt any changes made to the underlying Grid 
properties (common oversight). 

Modified:
    struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs
    struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs

Modified: struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs?view=diff&rev=467633&r1=467632&r2=467633
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Core/Helpers/ViewHelper.cs Wed Oct 25 
06:21:04 2006
@@ -61,7 +61,7 @@
                        foreach (string key in keys)
                        {
                                string s = null;
-                               string o = (input[key] as string);
+                               string o = Convert.ToString(input[key]);
                                if (o!=null) s = o.Trim();
                                if ((nullIfEmpty) && (s != null) && (s.Length 
== 0))
                                        criteria.Add(key, null);
@@ -79,7 +79,7 @@
                {
                        get
                        {
-                               IList result = null;
+                               IList result;
                                object o = Criteria[Context.Command];
                                if (o == null)
                                {

Modified: struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs?view=diff&rev=467633&r1=467632&r2=467633
==============================================================================
--- struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs (original)
+++ struts/sandbox/trunk/overdrive/Nexus/Web/GridControl.ascx.cs Wed Oct 25 
06:21:04 2006
@@ -243,7 +243,7 @@
 
                public virtual string ItemCommandName
                {
-                       get { return _ItemCommand as string; }
+                       get { return _ItemCommand; }
                        set { _ItemCommand = value; }
                }
 
@@ -271,13 +271,22 @@
                        set { _AllowCustomPaging = value; }
                }
 
+               const int DEFAULT_DATAGRID_PAGESIZE = 10;
+               private int _PageSize = DEFAULT_DATAGRID_PAGESIZE;
+
+               public virtual int PageSize
+               {
+                       get { return _PageSize; }
+                       set { _PageSize = value; }
+               }
+
                #endregion              
 
                #region Binding methods 
 
                protected virtual void DataSource(IViewHelper helper)
                {
-                       IList list = helper.Outcome as IList;
+                       IList list = helper.Outcome;
                        DataGrid grid = Grid;
                        grid.DataSource = list;
                        if (grid.AllowCustomPaging)
@@ -374,6 +383,7 @@
 
                protected virtual void BindGrid(IViewHelper helper)
                {
+
                        // Only bind columns once
                        // WARNING: Won't work with a singleton
                        DataGrid grid = Grid;
@@ -384,8 +394,12 @@
                                int i = 0;
                                if (HasEditColumn) i = BindEditColumn(i);
                                if (HasItemColumn) i = BindItemColumn(i);
+                               // Adopt any direct changes to Grid object
+                               if (grid.PageSize==DEFAULT_DATAGRID_PAGESIZE) 
grid.PageSize = PageSize;
+                               AllowCustomPaging = AllowCustomPaging || 
grid.AllowCustomPaging;
+                               // Check custom page settings
                                if (AllowCustomPaging)
-                               {
+                               {                                       
                                        count = GetItemCount(helper);
                                        grid.AllowCustomPaging = true;
                                        grid.VirtualItemCount = count;
@@ -483,11 +497,11 @@
                        // Fake a blank row
                        IViewHelper helper = GetHelperFor(ListCommand);
                        list.Insert(String.Empty);
-                       // ISSUE: FIXME: Do we need helper.Outcome = list;
+                       helper.Criteria[ListCommand] = list;
                        grid.DataSource = list;
                        grid.CurrentPageIndex = 0;
                        grid.EditItemIndex = 0;
-                       DataBind();
+                       BindGrid(helper);
                        return helper;
                }
 
@@ -576,7 +590,7 @@
 
                public virtual bool Open()
                {
-                       IViewHelper helper = this.LoadGrid(list_Criteria);
+                       IViewHelper helper = LoadGrid(list_Criteria);
                        bool okay = helper.IsNominal;
                        if (!okay)
                        {
@@ -670,6 +684,7 @@
                                // ISSUE: Event? Page_Prompt = msg_EDIT_HINT;
                                list_Insert = true;
                                list_ItemIndex = 0;
+                               Grid.Visible = true;
                        }
                        else Page_Alert = helper;
                }
@@ -712,10 +727,11 @@
                        IViewHelper helper = Save(key, controls);
                        bool okay = helper.IsNominal;
                        if (okay)
-                       {
+                       {                               
+                               if (View_Save != null) View_Save(this, new 
ViewArgs(helper));
                                list_Insert = false;
                                list_ItemIndex = -1;
-                               okay = this.Open();
+                               okay = Open();
                                // ISSUE: Event? Page_Prompt = (List_Insert) ? 
msg_ADD_SUCCESS : msg_SAVE_SUCCESS;
                        }
                        if (!okay) Page_Alert = helper;
@@ -738,6 +754,7 @@
                        list_Item(e.CommandName, index);
                }
 
+
                public const string ITEM_LIMIT = "item_limit";
                public const string ITEM_OFFSET = "item_offset";
                public const string ITEM_COUNT = "item_count";
@@ -775,7 +792,7 @@
                        public int ItemThru;
                        public int ItemCount;
                }
-               
+
                /// <summary>
                /// Optional extension point so that subclasses can make 
adjustments 
                /// based on whether there are items to display or not. 
@@ -882,10 +899,16 @@
 
                protected virtual void list_Item_Click(int index)
                {
-                       // Override to provide implementation
+                       // Override to provide implementation                   
                }
 
                /// <summary>
+               /// Signal when an item is being saved.
+               /// </summary>
+               /// 
+               public event EventHandler View_Save;
+
+               /// <summary>
                /// Reset state for this control, including any ViewState 
attributes
                /// and the page indexes (@see(list_ResetIndex)), 
                /// usually on a new Open event or on a Quit event,
@@ -912,7 +935,7 @@
                        grid.UpdateCommand += new 
DataGridCommandEventHandler(list_Save);
                        grid.ItemCommand += new 
DataGridCommandEventHandler(List_Item);
                        grid.PageIndexChanged += new 
DataGridPageChangedEventHandler(list_PageIndexChanged);
-                       if (this.Visible) Open();
+                       if (Visible) Open();
                }
 
                #region Web Form Designer generated code
@@ -1156,16 +1179,21 @@
                        }
 
                        public DropDownListTemplate(string id, IKeyValueList 
list) : this(id,list,false)
-                       {
-                               
-                       }
-                               
+                       {}
+
                        public DropDownListTemplate(string id, IKeyValueList 
list, bool insertNullKey)
                        {
-                               if (insertNullKey) 
-                               {
-                                       list.Insert(0, new 
KeyValue(String.Empty, NULL_TOKEN));
-                               }
+                                       if (insertNullKey) 
+                                       {
+                                               lock(list)
+                                               {
+                                                       IKeyValue e = list[0] 
as KeyValue;
+                                                       if 
(!NULL_TOKEN.Equals(e.Text))
+                                                       {                       
                                        
+                                                               list.Insert(0, 
new KeyValue(String.Empty, NULL_TOKEN));                                        
 
+                                                       }
+                                               }
+                                       }                                       
 
                                _DataField = id;
                                _Control = new DropDownList();


Reply via email to