Major changes to the Rico 3 server control for SimpleGrids - much improved control...
authorMatt Brown <dowdybrown@yahoo.com>
Fri, 10 Jun 2011 19:48:37 +0000 (19:48 +0000)
committerMatt Brown <dowdybrown@yahoo.com>
Fri, 10 Jun 2011 19:48:37 +0000 (19:48 +0000)
git-svn-id: svn://svn.code.sf.net/p/openrico/code/trunk/rico3@86 53df2df2-7ab5-4331-af62-ea79255fa4e2

19 files changed:
bin/Rico.dll
bin/Rico.xml
documentation/LiveGrid.html
documentation/LiveGridForms.html
examples/dotnet/3grids.aspx
examples/dotnet/dbConnect.ascx
examples/dotnet/employees.aspx
examples/dotnet/ex2editfilter.aspx
examples/dotnet/ex2nosession.aspx
examples/dotnet/ex2notheme.aspx [new file with mode: 0644]
examples/dotnet/ex2style.aspx [new file with mode: 0644]
examples/dotnet/menu.aspx
examples/dotnet/simplegrid.aspx
minsrc/ricoGridCommon.js
minsrc/ricoLiveGrid.js
minsrc/ricoLiveGridForms.js
minsrc/ricoLiveGridMenu.js
minsrc/ricoSimpleGrid.js
ricoClient/js/rico_min.js

index b5569e0..249f2fe 100644 (file)
Binary files a/bin/Rico.dll and b/bin/Rico.dll differ
index e5be1e0..2aacf89 100644 (file)
@@ -42,88 +42,572 @@ Rico
  This class automatically disables caching of the response and sets the response type to text/xml\r
  </summary>\r
        <remarks></remarks>\r
-</member><member name="M:Rico.TableCollection.IndexOf(System.String)">\r
+</member><member name="T:Rico.sqlParse.sqlColumn">\r
        <summary>\r
- Returns the index of the table with TblName or -1 if not found\r
+ Represents a column in the select statement\r
  </summary>\r
-       <param name="TblName"></param>\r
-       <returns></returns>\r
        <remarks></remarks>\r
-</member><member name="P:Rico.GridBase.HdgRows">\r
+</member><member name="F:Rico.sqlParse.IsDistinct">\r
        <summary>\r
- Lines of text displayed for each heading row\r
+ True if the select statement contains the DISTINCT keyword\r
  </summary>\r
-       <value></value>\r
        <remarks></remarks>\r
-</member><member name="P:Rico.GridBase.DataRows">\r
+</member><member name="F:Rico.sqlParse.SelectList">\r
        <summary>\r
- Lines of text displayed for each data row\r
+ List of columns in the select statement\r
  </summary>\r
-       <value></value>\r
        <remarks></remarks>\r
-</member><member name="M:Rico.GridBase.AddColumn(Rico.Column)">\r
+</member><member name="F:Rico.sqlParse.GroupBy">\r
        <summary>\r
- Adds a column to the colums array\r
+ List of "group by" items in the select statement\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.sqlParse.OrderBy">\r
+       <summary>\r
+ List of "order by" items in the select statement\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.sqlParse.FromClause">\r
+       <summary>\r
+ From clause of the select statement, including any joins\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.sqlParse.WhereClause">\r
+       <summary>\r
+ Where clause of the select statement\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.sqlParse.HavingClause">\r
+       <summary>\r
+ Having clause of the select statement\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.sqlParse.Headings">\r
+       <summary>\r
+ List of column headings in the select list.\r
+ Set after an any unparse* call.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="M:Rico.sqlParse.Clone">\r
+       <summary>\r
+ Returns a cloned copy of this object\r
  </summary>\r
-       <param name="ColumnObj"></param>\r
        <returns></returns>\r
        <remarks></remarks>\r
-</member><member name="P:Rico.GridBase.OuterDivId">\r
+</member><member name="M:Rico.sqlParse.UnparseSelect">\r
        <summary>\r
- Returns the id of the outermost grid container\r
+ Builds a SQL select statement string from its parsed components\r
  </summary>\r
-       <value></value>\r
        <returns></returns>\r
        <remarks></remarks>\r
-</member><member name="M:Rico.GridBase.ColClassName(System.Int32)">\r
+</member><member name="M:Rico.sqlParse.UnparseSelectDistinct">\r
        <summary>\r
- Returns the class name of the specified grid column\r
+ Rebuilds a SQL select statement that was parsed by ParseSelect, inserting the DISTINCT keyword\r
+ </summary>\r
+       <returns></returns>\r
+       <remarks></remarks>\r
+</member><member name="M:Rico.sqlParse.UnparseDistinctColumnAccess(System.Int32)">\r
+       <summary>\r
+ Returns a SQL select statement that will return all of the values in a particular column.\r
+ This version is meant MS Access, as it does not support ordering by column name\r
  </summary>\r
        <param name="colnum"></param>\r
        <returns></returns>\r
        <remarks></remarks>\r
-</member><member name="M:Rico.GridBase.GridRules">\r
+</member><member name="M:Rico.sqlParse.UnparseDistinctColumn(System.Int32)">\r
        <summary>\r
- Returns the set of css rules that apply to this grid\r
+ Returns a SQL select statement that will return all of the values in a particular column.\r
+ The returned statement is not compatible MS Access, use UnparseDistinctColumnAccess() instead.\r
  </summary>\r
+       <param name="colnum"></param>\r
        <returns></returns>\r
        <remarks></remarks>\r
-</member><member name="F:Rico.StyleBase.fontsize">\r
+</member><member name="M:Rico.sqlParse.UnparseColumnList">\r
        <summary>\r
- font size in points\r
+ Returns the select list part of the statement as a string\r
  </summary>\r
+       <returns></returns>\r
        <remarks></remarks>\r
-</member><member name="F:Rico.StyleBase.GridOnly">\r
+</member><member name="M:Rico.sqlParse.UnparseWithRowNumber(System.Int32,System.Int32,System.Boolean)">\r
        <summary>\r
- If true, then style is only applied to the grid, not to exports\r
+ Returns a "windowed" select query.\r
  </summary>\r
+       <param name="offset">The first row number to be returned</param>\r
+       <param name="numrows">The number of rows to return</param>\r
+       <param name="includeAS">use true for SQL Server 2005+ and false for Oracle</param>\r
+       <returns></returns>\r
        <remarks></remarks>\r
-</member><member name="P:Rico.StyleBase.bgcolor">\r
+</member><member name="M:Rico.sqlParse.Clear">\r
        <summary>\r
- Specifies the background color\r
+ Resets the object and prepares it to parse another select statement.\r
  </summary>\r
-       <value></value>\r
+       <remarks></remarks>\r
+</member><member name="M:Rico.sqlParse.ParseSelect(System.String)">\r
+       <summary>\r
+ Loads a select statement into the object.\r
+ Does not handle:\r
+ <list type="bullet">\r
+                       <item><description>union queries *</description></item>\r
+                       <item><description>select into</description></item>\r
+                       <item><description>select top</description></item>\r
+                       <item><description>more than one space between "group" and "by", or "order" and "by"</description></item>\r
+                       <item><description>stored procedures</description></item>\r
+               </list>\r
+               <para>* Put union queries in a view and then write your select statement against the view.</para>\r
+       </summary>\r
+       <param name="sqltext"></param>\r
        <returns></returns>\r
        <remarks></remarks>\r
-</member><member name="P:Rico.StyleBase.color">\r
+</member><member name="T:Rico.sqlParse">\r
+       <summary>\r
+ Holds a SQL select statement. Methods to load/parse a select statement from a string and to reassemble it in various ways.\r
+ Does not handle union queries.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="P:Rico.SimpleCol.Width">\r
+       <summary>\r
+ Initial width of the column in pixels. Default is to use SimpleGrid.defaultWidth.\r
+ </summary>\r
+</member><member name="F:Rico.Column.canSort">\r
+       <summary>\r
+ Is the user allowed to sort the column? Default is true.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.canDrag">\r
+       <summary>\r
+ Is the user allowed to drag a column value? Default is false.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.canFilter">\r
+       <summary>\r
+ Is the user allowed to filter the column? Default is true.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.control">\r
+       <summary>\r
+ Javascript code to create a control object, which changes the way the column data is rendered.\r
+ The disadvantage of using this approach is that the altered rendering does not get reflected in exports.\r
+ A set of controls is defined in ricoLiveGridControls.js or the developer can create their own.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.filterUI">\r
+       <summary>\r
+ If the AutoFilter option is enabled for the grid, then filterUI will control how each column is filtered. If filterUI is:\r
+ <list type="bullet">\r
+                       <item><description>null or omitted, then no filter is displayed for the column.</description></item>\r
+                       <item><description>'t' - will generate a text box filter and the records being displayed are filtered as the user types. May be followed by a number to indicate the size of the text box (default size is 10). </description></item>\r
+                       <item><description>'s' - will generate a select list filter with all possible column values contained in the list. Populated using a 'select distinct' query if the grid's source is a SQL query.</description></item>\r
+                       <item><description>'m' - will generate multi-select checklist filter, with a checkbox text to each item.</description></item>\r
+               </list>\r
+       </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.filterColId">\r
+       <summary>\r
+ This setting allows the filterUI to filter a different column than where it is displayed.\r
+ This is particularly useful for dates, where you can show a year selection on an OrderDate date column for example,\r
+ but actually have it filter a hidden column OrderYear=year(OrderDate).\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.ConfirmDeleteColumn">\r
+       <summary>\r
+ The text content of this column will be included in delete confirmation messages.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.multiplier">\r
+       <summary>\r
+ If column is a number, this value can be used to multiply the database value by a factor before displaying it in the grid.\r
+ Default is 1. Automatically set to 100 if DataType is percent.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.decPlaces">\r
+       <summary>\r
+ If column is a number, this is the number of digits displayed to the right of the decimal point. Default is 0.\r
+ If DataType is dollar or euro, then decPlaces is automatically set to 2.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.thouSep">\r
+       <summary>\r
+ If column is a number, display the value with a thousands separator? Default is true.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.negSign">\r
+       <summary>\r
+ Specifies how negative numbers should be displayed. Possible values:\r
+ <list>\r
+                       <item><description>L=leading minus (default)</description></item>\r
+                       <item><description>T=trailing minus</description></item>\r
+                       <item><description>P=parentheses</description></item>\r
+               </list>\r
+       </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.prefix">\r
+       <summary>\r
+ If column is a number, this string is prepended to the number before display.\r
+ Useful for currency symbols.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.suffix">\r
+       <summary>\r
+ If column is a number, this string is appended to the number before display.\r
+ Useful for percentages and temperature values. Automatically set to % if DataType is percent.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.isNullable">\r
+       <summary>\r
+ Database property - set automatically by LiveGrid.GetColumnInfoFromDb()\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.Writeable">\r
+       <summary>\r
+ Database property - set automatically by LiveGrid.GetColumnInfoFromDb()\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.isKey">\r
+       <summary>\r
+ Database property - set automatically by LiveGrid.GetColumnInfoFromDb()\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.Length">\r
+       <summary>\r
+ Database property - set automatically by LiveGrid.GetColumnInfoFromDb()\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.Column.TypeName">\r
+       <summary>\r
+ Database property - set automatically by LiveGrid.GetColumnInfoFromDb()\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="P:Rico.Column.Width">\r
+       <summary>\r
+ Initial width of the column in pixels. Default is to use LiveGrid.defaultWidth.\r
+ </summary>\r
+</member><member name="M:Rico.Column.NumberFormat">\r
+       <summary>\r
+ Returns an Excel-type number format string based on decPlaces, thouSep, prefix.\r
+ </summary>\r
+       <returns></returns>\r
+       <remarks></remarks>\r
+</member><member name="P:Rico.Column.DataType">\r
        <summary>\r
- Specifies the font color\r
+ Type of data stored in the column.\r
  </summary>\r
        <value></value>\r
        <returns></returns>\r
        <remarks></remarks>\r
-</member><member name="P:Rico.StyleBase.align">\r
+</member><member name="T:Rico.Column">\r
+       <summary>\r
+ Base class for a LiveGrid column\r
+ </summary>\r
+</member><member name="P:Rico.LiveGrid.formVar">\r
+       <summary>\r
+ name of Javascript object containing LiveGrid Edit\r
+ </summary>\r
+</member><member name="P:Rico.LiveGrid.bufferVar">\r
+       <summary>\r
+ name of Javascript object containing LiveGrid buffer\r
+ </summary>\r
+</member><member name="P:Rico.LiveGrid.bufferOptVar">\r
+       <summary>\r
+ name of Javascript object containing initial LiveGrid buffer options\r
+ </summary>\r
+</member><member name="F:Rico.LiveGrid.SqlCompat">\r
        <summary>\r
- Specifies horizontal alignment\r
+ Provides a set of functions that mask differences across various SQL dialects. Available once dbDialect is set.\r
+ </summary>\r
+</member><member name="P:Rico.LiveGrid.rows">\r
+       <summary>\r
+ Number of visible rows in the grid.\r
+ Negative values have the following meanings:\r
+ <list type="bullet">\r
+                       <item><description>-1: size grid to client window</description></item>\r
+                       <item><description>-2: size grid to whichever is smaller: the client window or the data</description></item>\r
+                       <item><description>-3: size grid so that the page body does not have a scrollbar (default)</description></item>\r
+                       <item><description>-4: size grid to its parent node in the DOM</description></item>\r
+               </list>\r
+       </summary>\r
+</member><member name="P:Rico.LiveGrid.HtmlSourceId">\r
+       <summary>\r
+ If grid is populated from an html table, then set HtmlSourceId to the id of the source table\r
  </summary>\r
        <value></value>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.LiveGrid.ColGroups">\r
+       <summary>\r
+ Collection of ColumnGroup objects, which define the headings used above each group of columns.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.LiveGrid.Tables">\r
+       <summary>\r
+ Defines the tables used by the LiveGrid. The first table is primary/main table.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="M:Rico.LiveGrid.ColClassName(System.Int32)">\r
+       <summary>\r
+ Returns the class name of the specified grid column\r
+ </summary>\r
+       <param name="colnum"></param>\r
+       <returns></returns>\r
+       <remarks></remarks>\r
+</member><member name="M:Rico.LiveGrid.AddColumn(Rico.Column)">\r
+       <summary>\r
+ Adds a new column to grid, returns column index\r
+ </summary>\r
+       <param name="ColumnObj"></param>\r
        <returns></returns>\r
        <remarks></remarks>\r
+</member><member name="T:Rico.LiveGrid">\r
+       <summary>\r
+ Class to define a LiveGrid\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="M:Rico.TableCollection.IndexOf(System.String)">\r
+       <summary>\r
+ Returns the index of the table with TblName or -1 if not found\r
+ </summary>\r
+       <param name="TblName"></param>\r
+       <returns></returns>\r
+       <remarks></remarks>\r
+</member><member name="P:Rico.GridBase.gridVar">\r
+       <summary>\r
+ Name of grid Javascript object\r
+ </summary>\r
+</member><member name="P:Rico.GridBase.optionsVar">\r
+       <summary>\r
+ Name of grid options Javascript object\r
+ </summary>\r
+</member><member name="F:Rico.GridBase.AutoFilter">\r
+       <summary>\r
+ If enabled, an additional row is added to the grid header where column filters are placed. \r
+ See the EditCol.filterUI property to customize each column's filter.\r
+ </summary>\r
+</member><member name="F:Rico.GridBase.FilterAllToken">\r
+       <summary>\r
+ The token in select filters used to indicate "show all values" (default: "___ALL___").\r
+ </summary>\r
+</member><member name="F:Rico.GridBase.defaultWidth">\r
+       <summary>\r
+ if -1 (default), then use column heading width, otherwise this is the default width in pixels\r
+ </summary>\r
+</member><member name="F:Rico.GridBase.allowColResize">\r
+       <summary>\r
+ Allow user to resize columns? Default is true.\r
+ </summary>\r
+</member><member name="F:Rico.GridBase.frozenColumns">\r
+       <summary>\r
+ Number of frozen columns on the left (or right if direction=rtl). Default is 0.\r
+ </summary>\r
+</member><member name="P:Rico.GridBase.menuEvent">\r
+       <summary>\r
+ Specifies when the grid's popup menu should be invoked \r
+ </summary>\r
+</member><member name="F:Rico.GridBase.DefaultStyle">\r
+       <summary>\r
+ Style used for the entire grid - headings and data.\r
+ </summary>\r
+</member><member name="F:Rico.GridBase.DefaultHdgStyle">\r
+       <summary>\r
+ This holds the default style for headings. Use only if not using themes.\r
+ </summary>\r
+</member><member name="F:Rico.GridBase.Styles">\r
+       <summary>\r
+ Collection of styles used for individual headings.\r
+ </summary>\r
+</member><member name="P:Rico.GridBase.HdgRows">\r
+       <summary>\r
+ Lines of text displayed for each heading row\r
+ </summary>\r
+</member><member name="P:Rico.GridBase.DataRows">\r
+       <summary>\r
+ Lines of text displayed for each data row\r
+ </summary>\r
+</member><member name="P:Rico.GridBase.OuterDivId">\r
+       <summary>\r
+ Returns the id of the outermost grid container\r
+ </summary>\r
+</member><member name="M:Rico.GridBase.GetColumnIdx(System.String)">\r
+       <summary>\r
+ Returns the index of the column with the given id\r
+ </summary>\r
+</member><member name="M:Rico.GridBase.GetColumn(System.String)">\r
+       <summary>\r
+ Returns the column object with the given id\r
+ </summary>\r
+</member><member name="M:Rico.GridBase.GridRules">\r
+       <summary>\r
+ Returns the set of css rules that apply to this grid\r
+ </summary>\r
+</member><member name="T:Rico.GridBase">\r
+       <summary>\r
+ This class defines properties and functions used in SimpleGrid, LiveGrid and LiveGridEdit classes.\r
+ </summary>\r
+</member><member name="P:Rico.StyleBase.bold">\r
+       <summary>\r
+ True if the text should be displayed using a bold font\r
+ </summary>\r
+</member><member name="P:Rico.StyleBase.italic">\r
+       <summary>\r
+ True if the text should be displayed in italics\r
+ </summary>\r
+</member><member name="P:Rico.StyleBase.underline">\r
+       <summary>\r
+ True if the text should be underlined\r
+ </summary>\r
+</member><member name="P:Rico.StyleBase.fontsize">\r
+       <summary>\r
+ Font size in points\r
+ </summary>\r
+</member><member name="P:Rico.StyleBase.GridOnly">\r
+       <summary>\r
+ If true, then style is only applied to the grid, not to html or Excel exports\r
+ </summary>\r
+</member><member name="P:Rico.StyleBase.bgcolor">\r
+       <summary>\r
+ Specifies the background color. One of the 16 standard color names, or #rrggbb.\r
+ </summary>\r
+</member><member name="P:Rico.StyleBase.color">\r
+       <summary>\r
+ Specifies the font color. One of the 16 standard color names, or #rrggbb.\r
+ </summary>\r
+</member><member name="P:Rico.StyleBase.align">\r
+       <summary>\r
+ Specifies horizontal alignment: left, right, center, or none (default)\r
+ </summary>\r
+</member><member name="P:Rico.StyleBase.CssStyle">\r
+       <summary>\r
+ Used internally. Returns the style properties as a css string.\r
+ </summary>\r
+</member><member name="M:Rico.StyleBase.UnwrappedXlStyle">\r
+       <summary>\r
+ Used internally. Returns the style properties as an Excel XML string without the style tag.\r
+ </summary>\r
+</member><member name="T:Rico.StyleBase">\r
+       <summary>\r
+ Base class for all style classes as well as the Column class.\r
+ </summary>\r
+</member><member name="T:Rico.DefaultGridStyle">\r
+       <summary>\r
+ This is the style applied to the entire grid - headings and data.\r
+ </summary>\r
+</member><member name="T:Rico.DefaultHdgStyle">\r
+       <summary>\r
+ This defines the default heading style when no theme is used.\r
+ </summary>\r
+</member><member name="P:Rico.Style.StyleID">\r
+       <summary>\r
+ StyleID's should not contain spaces or other special characters.\r
+ Use a StyleID of ricoLG_evenRow or ricoLG_oddRow to stripe the grid (striping does not get exported).\r
+ Use a StyleID of ricoLG_selection to set the styling for the selected row.\r
+ </summary>\r
+</member><member name="M:Rico.Style.CssRule">\r
+       <summary>\r
+ Returns the style properties as a CSS rule\r
+ </summary>\r
+</member><member name="M:Rico.Style.WrappedXlStyle">\r
+       <summary>\r
+ Returns the style properties as an Excel XML style, including the style tag\r
+ </summary>\r
 </member><member name="T:Rico.Style">\r
        <summary>\r
  Defines a style that can be applied to a grid cell.\r
  Using a StyleID of ricoLG_evenRow or ricoLG_oddRow will stripe the grid, however striping does not get exported.\r
  Using a StyleID of ricoLG_selection will set the styling for the selected row.\r
+ </summary>\r
+</member><member name="T:Rico.SimpleStyle">\r
+       <summary>\r
+ Defines styles used in Simple Grids\r
+ </summary>\r
+</member><member name="M:Rico.StyleDictionary.Add(Rico.Style)">\r
+       <summary>\r
+ Adds a Style object to the collection\r
+ </summary>\r
+       <param name="new_style"></param>\r
+</member><member name="P:Rico.StyleDictionary.Item(System.String)">\r
+       <summary>\r
+ Returns a Style object from the collection based on the style's StyleID\r
+ </summary>\r
+       <param name="StyleId"></param>\r
+</member><member name="P:Rico.StyleDictionary.Keys">\r
+       <summary>\r
+ Returns all of the StyleID's in the collection\r
+ </summary>\r
+</member><member name="P:Rico.StyleDictionary.Values">\r
+       <summary>\r
+ Returns all of the Style objects in the collection\r
+ </summary>\r
+</member><member name="M:Rico.StyleDictionary.Contains(System.String)">\r
+       <summary>\r
+ Returns true if the StyleID is in the collection\r
+ </summary>\r
+       <param name="StyleId"></param>\r
+</member><member name="M:Rico.StyleDictionary.Remove(System.String)">\r
+       <summary>\r
+ Removes the Style object with the given StyleID from the collection\r
+ </summary>\r
+       <param name="StyleId"></param>\r
+</member><member name="T:Rico.StyleDictionary">\r
+       <summary>\r
+ Container for a collection of Style objects\r
+ </summary>\r
+</member><member name="F:Rico.LoadClient.ImgHeading">\r
+       <summary>\r
+ Background image for grid headings and window titles.\r
+ Should be left unset, as it is used only for the grayedout theme (in which case it is set automatically).\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.LoadClient.BaseLib">\r
+       <summary>\r
+ The base Javascript library to load from http://ajax.googleapis.com/ajax/libs/, possible values include:\r
+ <list type="bullet">\r
+                       <item><description>prototype/1.6/prototype.js</description></item>\r
+                       <item><description>prototype/1.7/prototype.js</description></item>\r
+                       <item><description>jquery/1.3/jquery.min.js</description></item>\r
+                       <item><description>jquery/1.4/jquery.min.js</description></item>\r
+                       <item><description>jquery/1.5/jquery.min.js</description></item>\r
+                       <item><description>mootools/1.2/mootools-yui-compressed.js</description></item>\r
+                       <item><description>mootools/1.3/mootools-yui-compressed.js</description></item>\r
+                       <item><description>dojo/1.4/dojo/dojo.xd.js</description></item>\r
+                       <item><description>dojo/1.5/dojo/dojo.xd.js</description></item>\r
+                       <item><description>ext-core/3.0/ext-core.js</description></item>\r
+                       <item><description>ext-core/3.1/ext-core.js</description></item>\r
+               </list>\r
+               <para>Default value is "proto_min", which loads prototype 1.7 from the server control.</para>\r
+       </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.LoadClient.Logging">\r
+       <summary>\r
+ Enable Javascript console logging? Useful for debugging. Default is false.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.LoadClient.Language">\r
+       <summary>\r
+ Best left unset, in which case language will be set automatically based on request's HTTP_ACCEPT_LANGUAGE\r
+ However, if you want to present the same locale settings to all users, then you can set this value to force the desired locale.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.LoadClient.LoadBaseLib">\r
+       <summary>\r
+ Load base Javascript library (prototype, jQuery, etc)?\r
+ Default is true.\r
+ Set to false if library is being loaded another way. In this case, a BaseLib value is still required to indicate\r
+ which library Rico should connect to.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.LoadClient.Striping">\r
+       <summary>\r
+ Apply row striping to LiveGrids? Default is true. Applies only when themes are used.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.LoadClient.SupportedLangs">\r
+       <summary>\r
+ Comma separated list of 2 letter locales that Rico supports.\r
+ Do not set unless you have developed your own locale file.\r
+ </summary>\r
+       <remarks></remarks>\r
+</member><member name="F:Rico.LoadClient.jQueryThemePath">\r
+       <summary>\r
+ URL to load jQuery themes from.\r
+ Default is http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/\r
+ Override this value if you have a jQuery theme on your own server.\r
  </summary>\r
        <remarks></remarks>\r
 </member><member name="P:Rico.LoadClient.LoadedLanguage">\r
@@ -135,6 +619,25 @@ Rico
        <value></value>\r
        <returns></returns>\r
        <remarks></remarks>\r
+</member><member name="P:Rico.LoadClient.checkQueryString">\r
+       <summary>\r
+ Load settings from QueryString?  true for demo, false for anything else. Default is false.\r
+ </summary>\r
+</member><member name="P:Rico.LoadClient.checkWebConfig">\r
+       <summary>\r
+ Load settings from web.config file? Default is false.\r
+ If true, then the appSettings section of web.config will be checked for the following keys (which affect the similarly named properties):\r
+ <list type="bullet">\r
+                       <item><description>rico_BaseLib</description></item>\r
+                       <item><description>rico_Language</description></item>\r
+                       <item><description>rico_jTheme</description></item>\r
+                       <item><description>rico_rTheme</description></item>\r
+                       <item><description>rico_Logging</description></item>\r
+                       <item><description>rico_LoadBaseLib</description></item>\r
+                       <item><description>rico_Striping</description></item>\r
+               </list>\r
+               <para>Boolean values in web.config should be the strings "true" or "1" for true, and "false" or "0" for false.</para>\r
+       </summary>\r
 </member><member name="M:Rico.LoadClient.InitLiveGrids">\r
        <summary>\r
  Initialize all grids on the page\r
@@ -143,6 +646,29 @@ Rico
  </summary>\r
        <returns>javascript to initialize grids</returns>\r
        <remarks></remarks>\r
+</member><member name="P:Rico.LoadClient.jTheme">\r
+       <summary>\r
+ Set theme to one of the jQuery Themeroller themes. Default is no theme.\r
+ Valid values are:\r
+   black-tie, blitzer, cupertino, dark-hive, dot-luv, eggplant, excite-bike, flick, \r
+   hot-sneaks, humanity, le-frog, mint-choc, overcast, pepper-grinder, redmond, smoothness, \r
+   south-street, start, sunny, swanky-purse, trontastic, ui-darkness, ui-lightness, vader\r
+ </summary>\r
+       <value></value>\r
+       <remarks></remarks>\r
+</member><member name="P:Rico.LoadClient.rTheme">\r
+       <summary>\r
+ Set theme to one of the Rico themes. Default is no theme.\r
+ Valid values are:\r
+   coffee-with-milk, grayedout, greenHdg, seaglass, warmfall\r
+ </summary>\r
+       <value></value>\r
+       <remarks></remarks>\r
+</member><member name="T:Rico.LoadClient">\r
+       <summary>\r
+ Loads the various Javascript, CSS, and image files required to make Rico function.\r
+ </summary>\r
+       <remarks></remarks>\r
 </member><member name="P:Rico.My.Resources.Resources.ResourceManager">\r
        <summary>\r
   Returns the cached ResourceManager instance used by this class.\r
index ccc411f..73603ea 100644 (file)
@@ -706,21 +706,20 @@ any filter that is found.  Filter parameters must be of the form "f[x]=" where x
 <dd>Allow columns to be resized by the user? If true, then resizing for individual columns \r
 can be disabled using <a href='#noResize'>noResize</a> in columnSpecs[].\r
 \r
-<dt>panels\r
+<dt>ColGroups\r
 <dd>An array of strings that can serve as secondary headings.\r
 In LiveGrid Forms, they also serve as the headings for the tabbed panels on the input form.\r
 \r
-<dt>PanelNamesOnTabHdr\r
-<dd>Set to 'true' for the strings in panels[] to be used as secondary headings.\r
-In LiveGrid Forms, it may be set to 'false' so that panels[] is only used on the input form.\r
+<dt>ColGroupsOnTabHdr\r
+<dd>Set to 'true' for the strings in ColGroups[] to be used as secondary headings.\r
+In LiveGrid Forms, it may be set to 'false' so that ColGroups[] is only used on the input form.\r
 \r
-<dt><a name='FilterLocation'>FilterLocation</a>\r
-<dd>Specifies the heading row where filters should be placed.\r
--1 causes a new row to be appended to the header and that new row used for filtering.\r
-See also the <a href='#filterUI'>filterUI</a> option.\r
+<dt><a name='AutoFilter'>AutoFilter</a>\r
+<dd>If enabled, an additional row is added to the grid header where column filters are placed.\r
+See the <a href='#filterUI'>filterUI</a> option to customize each column's filter.\r
 \r
 <dt>FilterAllToken\r
-<dd>Token in select filters used to indicate "show all values" (default: "___ALL___").\r
+<dd>The token in select filters used to indicate "show all values" (default: "___ALL___").\r
 </dl>\r
 \r
 <h4>Cookie options</h4>\r
@@ -831,9 +830,9 @@ This only needs to be specified if the web page uses multiple distinct zones.
 <dd>A string that specifies when the grid's menu should be invoked\r
   <ul>\r
   <li>'click' -- invoke menu on single-click\r
-  <li>'dblclick' -- invoke menu on double-click (default)\r
+  <li>'dblclick' -- invoke menu on double-click\r
   <li>'contextmenu' -- invoke menu on right-click\r
-  <li>'none' -- no pop-up menu\r
+  <li>'none' -- no pop-up menu (default)\r
   </ul>\r
 \r
 <dt>windowResize\r
@@ -1116,24 +1115,20 @@ MyCustomColumn.prototype = {
 </pre>\r
 \r
 <dt><a name='filterUI'></a>filterUI\r
-<dd>If a <a href='#FilterLocation'>FilterLocation</a> option is specified for the grid, then filterUI will control\r
+<dd>If the <a href='#AutoFilter'>AutoFilter</a> option is enabled for the grid, then filterUI will control\r
 how each column is filtered. If filterUI is:\r
 <ul>\r
 <li>null or omitted, then no filter is displayed for the column.\r
 <li>'t' - will generate a text box filter and the records being displayed\r
 are filtered as the user types. \r
-<br>May optionally be followed by a caret (^) to\r
-indicate that text box values should match the beginning of the column value.\r
-Otherwise, they can match anywhere in the column's value.\r
-<br>May also be followed by a number to indicate the size of the text box (default size is 10).\r
+<br>May be followed by a number to indicate the size of the text box (default size is 10).\r
 <pre>\r
-filterUI:'t^20' \r
+filterUI:'t20' \r
 // will create a text box that is 20 characters wide\r
-// text typed into the box will be compared to\r
-//    the beginning of each column value\r
 </pre>\r
 <li>'s' - will generate a select list filter with all possible column values contained in the list.\r
 Populated using a 'select distinct' query if the grid's source is a SQL query.\r
+<li>'m' - will generate multi-select checklist filter, with a checkbox text to each item.\r
 </ul>\r
 \r
 <dt></a>filterCol\r
index c26bfbb..d206505 100644 (file)
@@ -94,24 +94,24 @@ oForm.AddEntryField "field5", "Field #5", "T", ""
 oForm.AddEntryField "field6", "Field #6", "T", ""\r
 </pre>\r
 \r
-<p>Alternatively, the panelIdx property can be set for each field as it is defined. In this\r
+<p>Alternatively, the ColGroupIdx property can be set for each field as it is defined. In this\r
 case, AddPanel can be called at any time prior to DisplayPage.\r
 <pre>\r
 ' these fields appear on the first panel\r
 oForm.AddEntryField "field1", "Field #1", "T", ""\r
-oForm.CurrentField("panelIdx")=0\r
+oForm.CurrentField("ColGroupIdx")=0\r
 oForm.AddEntryField "field2", "Field #2", "T", ""\r
-oForm.CurrentField("panelIdx")=0\r
+oForm.CurrentField("ColGroupIdx")=0\r
 oForm.AddEntryField "field3", "Field #3", "T", ""\r
-oForm.CurrentField("panelIdx")=0\r
+oForm.CurrentField("ColGroupIdx")=0\r
 \r
 ' these fields appear on the second panel\r
 oForm.AddEntryField "field4", "Field #4", "T", ""\r
-oForm.CurrentField("panelIdx")=1\r
+oForm.CurrentField("ColGroupIdx")=1\r
 oForm.AddEntryField "field5", "Field #5", "T", ""\r
-oForm.CurrentField("panelIdx")=1\r
+oForm.CurrentField("ColGroupIdx")=1\r
 oForm.AddEntryField "field6", "Field #6", "T", ""\r
-oForm.CurrentField("panelIdx")=1\r
+oForm.CurrentField("ColGroupIdx")=1\r
 \r
 oForm.AddPanel "Panel #1"\r
 oForm.AddPanel "Panel #2"\r
index 1f2ab14..707d5ce 100644 (file)
@@ -7,9 +7,9 @@
 \r
 Sub Page_Load(Sender As object, e As EventArgs)\r
   Session.Timeout=60\r
-  if app.OpenGrid(customer,"contextmenu") then\r
-    app.SetGridOptions(order,"contextmenu")\r
-    app.SetGridOptions(detail,"contextmenu")\r
+  if app.OpenGrid(customer, Rico.menuEvents.contextmenu) then\r
+    app.SetGridOptions(order, Rico.menuEvents.contextmenu)\r
+    app.SetGridOptions(detail, Rico.menuEvents.contextmenu)\r
     order.sendDebugMsgs=true\r
     order.LogSqlOnError=true\r
     detail.sendDebugMsgs=true\r
index 8caa58a..1a2340c 100644 (file)
@@ -3,23 +3,24 @@
 <%@ Import Namespace="System.Data.OleDb" %>\r
 <%@ Import Namespace="System.Data.SqlClient" %>\r
 <%@ Import Namespace="System.Data.Odbc" %>\r
+<%@ Import Namespace="Rico" %>\r
 \r
 <script runat="server">\r
 \r
 Public dbConnection as object, accessRights as string\r
 Public LastErrorMsg as String\r
 Public defaultDB as String = "Northwind"\r
-Public const dbDialect     = "Access"   ' What kind of database are we connecting to?\r
+Public dbDialect as dbDialects = dbDialects.Access\r
 \r
 \r
 Public Function OpenDB()\r
   try\r
     select case dbDialect\r
-      case "Access": dbConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("../data/" & defaultDB & ".mdb") & ";User ID=;Password=;")\r
-      case "TSQL":   dbConnection = new SqlConnection("Data Source=MATTSPROBOOK\SQLEXPRESS;User ID=userid;Password=password;Initial Catalog=" & defaultDB & ";")\r
-      case "Oracle": dbConnection = new OleDbConnection("Provider=OraOLEDB.Oracle;Data Source=XE;User ID=" & defaultDB & ";Password=Password;")\r
-      case "MySQL":  dbConnection = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=" & defaultDB & ";USER=userid;PASSWORD=password;")\r
-      case "DB2":    dbConnection = new OleDbConnection("Provider=IBMDADB2;Data Source=NORTHWND;Protocol=local;CurrentSchema=SCHEMA;User ID=userid;Password=password;")\r
+      case dbDialects.Access: dbConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("../data/" & defaultDB & ".mdb") & ";User ID=;Password=;")\r
+      case dbDialects.TSQL:   dbConnection = new SqlConnection("Data Source=MATTSPROBOOK\SQLEXPRESS;User ID=userid;Password=password;Initial Catalog=" & defaultDB & ";")\r
+      case dbDialects.Oracle: dbConnection = new OleDbConnection("Provider=OraOLEDB.Oracle;Data Source=XE;User ID=" & defaultDB & ";Password=Password;")\r
+      case dbDialects.MySQL:  dbConnection = new OdbcConnection("DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=" & defaultDB & ";USER=userid;PASSWORD=password;")\r
+      case dbDialects.DB2:    dbConnection = new OleDbConnection("Provider=IBMDADB2;Data Source=NORTHWND;Protocol=local;CurrentSchema=SCHEMA;User ID=userid;Password=password;")\r
     end select\r
     dbConnection.Open()\r
     OpenDB=true\r
@@ -42,7 +43,7 @@ Public function OpenApp()
 end function\r
 \r
 \r
-Public function OpenGrid(oLiveGrid as object, optional menuevent as string = "click")\r
+Public function OpenGrid(oLiveGrid as object, optional menuevent as menuEvents = menuEvents.click)\r
   OpenGrid=false\r
   if not OpenApp() then\r
     response.write("ERROR: " & LastErrorMsg)\r
@@ -54,7 +55,7 @@ Public function OpenGrid(oLiveGrid as object, optional menuevent as string = "cl
 end function\r
 \r
 \r
-Public sub SetGridOptions(oLiveGrid as object, optional menuevent as string = "click")\r
+Public sub SetGridOptions(oLiveGrid as object, optional menuevent as menuEvents = menuEvents.click)\r
   oLiveGrid.dbConnection=Me.dbConnection\r
   oLiveGrid.dbDialect=Me.dbDialect\r
 \r
index 9b67dca..363d767 100644 (file)
@@ -7,10 +7,8 @@
 \r
 Sub Page_Load(Sender As object, e As EventArgs)\r
   Session.Timeout=60\r
-  dim arEmpSql as string() = {"%alias%LastName","', '","%alias%FirstName"}\r
-  dim oSqlCompat=new sqlCompatibilty(app.dbDialect)\r
-  ReportsTo.SelectSql="select EmployeeID," & oSqlCompat.Concat(arEmpSql,false) & " from employees order by LastName,FirstName" \r
   app.OpenGridForm(emp)\r
+  ReportsTo.SelectSql="select EmployeeID," & emp.SqlCompat.Concat(new String(){"%alias%LastName","', '","%alias%FirstName"}) & " from employees order by LastName,FirstName" \r
 End Sub\r
 \r
 </script>\r
index d89ae67..e708ea9 100644 (file)
@@ -8,10 +8,8 @@
 \r
 Sub Page_Load(Sender As object, e As EventArgs)\r
   Session.Timeout=60\r
-  dim arEmpSql as string() = {"LastName","', '","FirstName"}\r
-  dim oSqlCompat=new sqlCompatibilty(app.dbDialect)\r
-  EmployeeID.SelectSql="select EmployeeID," & oSqlCompat.Concat(arEmpSql,false) & " from employees order by LastName,FirstName" \r
   app.OpenGridForm(ex8)\r
+  EmployeeID.SelectSql="select EmployeeID," & ex8.SqlCompat.Concat(new String(){"LastName","', '","FirstName"}) & " from employees order by LastName,FirstName" \r
 End Sub\r
 \r
 </script>\r
@@ -41,7 +39,7 @@ Updates are disabled on the database, so you will get an error message if you tr
 <p><strong>Orders Table</strong></p>\r
 \r
 \r
-<Rico:LiveGridEdit runat='server' id='ex8' DefaultSort='OrderID' FilterLocation='-1'>\r
+<Rico:LiveGridEdit runat='server' id='ex8' DefaultSort='OrderID' AutoFilter='true'>\r
   <Rico:CalendarControl runat='server' id='Cal' icon='rico-icon rico-calarrow' />\r
   <Rico:TreeControl runat='server' id='CustomerTree' icon='rico-icon rico-dotbutton' source='CustTree.aspx' />\r
 \r
index 36e4444..dad6b74 100644 (file)
@@ -7,10 +7,8 @@
 \r
 Sub Page_Load(Sender As object, e As EventArgs)\r
   Session.Timeout=60\r
-  dim arEmpSql as string() = {"LastName","', '","FirstName"}\r
-  dim oSqlCompat=new sqlCompatibilty(app.dbDialect)\r
-  EmployeeID.SelectSql="select EmployeeID," & oSqlCompat.Concat(arEmpSql,false) & " from employees order by LastName,FirstName" \r
   app.OpenGridForm(nosession)\r
+  EmployeeID.SelectSql="select EmployeeID," & nosession.SqlCompat.Concat(new String(){"LastName","', '","FirstName"}) & " from employees order by LastName,FirstName" \r
 End Sub\r
 \r
 </script>\r
@@ -46,7 +44,7 @@ This overhead is not required when session variables are used.
 <p><strong>Orders Table (without sessions)</strong></p>\r
 \r
 \r
-<Rico:LiveGridEdit runat='server' id='nosession' DefaultSort='OrderID' FilterLocation='-1' sessions='false'>\r
+<Rico:LiveGridEdit runat='server' id='nosession' DefaultSort='OrderID' AutoFilter='true' sessions='false'>\r
   <Rico:CalendarControl runat='server' id='Cal' icon='rico-icon rico-calarrow' />\r
   <Rico:TreeControl runat='server' id='CustomerTree' icon='rico-icon rico-dotbutton' source='CustTree.aspx' />\r
 \r
diff --git a/examples/dotnet/ex2notheme.aspx b/examples/dotnet/ex2notheme.aspx
new file mode 100644 (file)
index 0000000..a50d619
--- /dev/null
@@ -0,0 +1,67 @@
+<%@ Page Language="VB" ResponseEncoding="iso-8859-1" %>\r
+<%@ Register TagPrefix="Rico" Assembly="Rico" NameSpace="Rico" %>\r
+<%@ Register TagPrefix="My" TagName="dbLib" Src="dbConnect.ascx" %>\r
+<My:dbLib id='app' runat='server' />\r
+\r
+<script runat="server">\r
+\r
+Sub Page_Load(Sender As object, e As EventArgs)\r
+  Session.Timeout=60\r
+  app.OpenGrid(ex2notheme)\r
+End Sub\r
+\r
+</script>\r
+\r
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\r
+<html>\r
+<head>\r
+<title>Rico LiveGrid-Example 2</title>\r
+\r
+<Rico:LoadClient id='RicoClient' checkQueryString='notheme' runat='server' />\r
+<link href="../demo.css" type="text/css" rel="stylesheet" />\r
+\r
+</head>\r
+<body>\r
+\r
+<div id='explanation'>\r
+Base Library: \r
+<script type='text/javascript'>\r
+document.write(Rico.Lib+' '+Rico.LibVersion);\r
+</script>\r
+<hr>\r
+This example shows how the entire grid can be customized by disabling the regular themes.\r
+Here we have specified:<ul>\r
+<li>A default heading style (white text on a black background)\r
+<li>Selected a custom heading style for the date columns\r
+<li>Selected a custom hover style (when you hover over the headings)\r
+<li>Selected a custom style for the date column data (red text)\r
+<li>Selected a custom row highlight when you click on a row (yellow background)\r
+<li>Specifed that ship information have a blue background when the ship country is France, and a red background when the ship country is Switzerland.\r
+</ul>\r
+Notice that when you export to Excel, styles and number formats get copied into the Excel file!\r
+One caveat: specifying a font color for a the heading cell only works when the grid's HdgHoverStyleId is set.\r
+Click on a cell to see available actions.\r
+</div>\r
+\r
+<Rico:LiveGrid runat='server' id='ex2notheme' fmt="json" DefaultSort='OrderID' menuEvent='click' frozenColumns='1' HdgHoverStyleId="GrayText" highlightElem='cursorRow'>\r
+  <Rico:DefaultHdgStyle runat='server' bgcolor="black" color="white" align="center" />\r
+  <Rico:Style runat='server' StyleID='RedHdg' bgcolor="red" color="white" align="center" />\r
+  <Rico:Style runat='server' StyleID='GrayText' color="#dddddd" />\r
+  <Rico:Style runat='server' StyleID='ricoLG_oddRow' bgcolor="#eeeeee" />\r
+  <Rico:Style runat='server' StyleID='ricoLG_selection' bgcolor="yellow" />\r
+  \r
+  <Rico:Table runat='server' TblName='orders' />\r
+  <Rico:TableCol runat='server' ColName='OrderID' heading='Order#' width='60' />\r
+  <Rico:TableCol runat='server' ColName='CustomerID' heading='Cust#' width='60' />\r
+  <Rico:TableCol runat='server' ColName='ShipName' heading='Ship Name' width='150' CellStyleColID='Country' />\r
+  <Rico:TableCol runat='server' ColName='ShipCity' heading='Ship City' width='120' CellStyleColID='Country' />\r
+  <Rico:TableCol runat='server' ColName='ShipCountry' heading='Ship Country' width='90' id='Country' CellStyleColID='Country' >\r
+    <Rico:Style runat='server' StyleID='France' bgcolor="blue" color="white" />\r
+    <Rico:Style runat='server' StyleID='Switzerland' bgcolor="red" color="white" />\r
+  </Rico:TableCol>\r
+  <Rico:TableCol runat='server' ColName='OrderDate' heading='Order Date' datatype='date' width='100' HdgStyleId='RedHdg' color='red' dateFmt='d mmm yyyy' />\r
+  <Rico:TableCol runat='server' ColName='ShippedDate' heading='Ship Date' datatype='date' width='100' HdgStyleId='RedHdg' color='red' dateFmt='d mmm yyyy' />\r
+</Rico:LiveGrid>\r
+\r
+</body>\r
+</html>\r
diff --git a/examples/dotnet/ex2style.aspx b/examples/dotnet/ex2style.aspx
new file mode 100644 (file)
index 0000000..99596b3
--- /dev/null
@@ -0,0 +1,49 @@
+<%@ Page Language="VB" ResponseEncoding="iso-8859-1" %>\r
+<%@ Register TagPrefix="Rico" Assembly="Rico" NameSpace="Rico" %>\r
+<%@ Register TagPrefix="My" TagName="dbLib" Src="dbConnect.ascx" %>\r
+<My:dbLib id='app' runat='server' />\r
+\r
+<script runat="server">\r
+\r
+Sub Page_Load(Sender As object, e As EventArgs)\r
+  Session.Timeout=60\r
+  app.OpenGrid(ex2style)\r
+End Sub\r
+\r
+</script>\r
+\r
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\r
+<html>\r
+<head>\r
+<title>Rico LiveGrid-Example 2</title>\r
+\r
+<Rico:LoadClient checkQueryString='true' runat='server' />\r
+<link href="../demo.css" type="text/css" rel="stylesheet" />\r
+\r
+</head>\r
+<body>\r
+\r
+<div id='explanation'>\r
+Base Library: \r
+<script type='text/javascript'>\r
+document.write(Rico.Lib+' '+Rico.LibVersion);\r
+</script>\r
+<hr>\r
+This example shows that columns can be styled. The two date columns have the font color set to red.\r
+Notice that when you export to Excel, those Excel columns are also red. Styles and number formats get copied into the Excel export!\r
+Click on a cell to see available actions.\r
+</div>\r
+\r
+<Rico:LiveGrid runat='server' id='ex2style' DefaultSort='OrderID' menuEvent='click' frozenColumns='1' highlightElem='cursorRow'>\r
+  <Rico:Table runat='server' TblName='orders' />\r
+  <Rico:TableCol runat='server' ColName='OrderID' heading='Order#' width='60' />\r
+  <Rico:TableCol runat='server' ColName='CustomerID' heading='Cust#' width='60' />\r
+  <Rico:TableCol runat='server' ColName='ShipName' heading='Ship Name' width='150' />\r
+  <Rico:TableCol runat='server' ColName='ShipCity' heading='Ship City' width='120' />\r
+  <Rico:TableCol runat='server' ColName='ShipCountry' heading='Ship Country' width='90' />\r
+  <Rico:TableCol runat='server' ColName='OrderDate' heading='Order Date' datatype='date' width='100' color='red' />\r
+  <Rico:TableCol runat='server' ColName='ShippedDate' heading='Ship Date' datatype='date' width='100' color='red' />\r
+</Rico:LiveGrid>\r
+\r
+</body>\r
+</html>\r
index 2f10753..e75e05a 100644 (file)
@@ -51,7 +51,7 @@ ul li {
 <li><a id="demo_ex2xml.aspx">LiveGrid sourced from SQL database (xml)</a>\r
 <li><a id="demo_ex2json.aspx">LiveGrid sourced from SQL database (json)</a>\r
 <li><a id="demo_ex2style.aspx">LiveGrid with custom column styles</a>\r
-<li><a id="demo_ex2notheme.aspx">LiveGrid with completely custom style</a>\r
+<li><a id="demo_ex2notheme.aspx">LiveGrid with many custom styles</a>\r
 <li><a id="demo_3grids.aspx">3 grids with drill-down</a>\r
 <li><a id="demo_ShipperEdit.aspx">Editable LiveGrid (Shippers)</a>\r
 <li><a id="demo_employees.aspx">Editable LiveGrid (Employees)</a>\r
index a9ddee3..32262a4 100644 (file)
@@ -15,14 +15,6 @@ Sub Page_Load(Sender As object, e As EventArgs)
     grandtotals(i)=0\r
   next\r
 \r
-  ' define heading\r
-  ex1.AddHeadingRow(true)\r
-  ex1.AddCell("Product")\r
-  ex1.AddCell("Gross Sales")\r
-  ex1.AddCell("Discounts")\r
-  ex1.AddCell("Net Sales")\r
-  ex1.AddCell("Avg Discount")\r
-\r
   command = app.dbConnection.CreateCommand()\r
   command.CommandText="select CategoryName,ProductName, " & _\r
     "SUM(od.UnitPrice*Quantity) as GrossSales, " & _\r
@@ -39,16 +31,14 @@ Sub Page_Load(Sender As object, e As EventArgs)
     Discounts=rdr("Discounts")\r
     if category<>lastCategory then\r
       if not IsNothing(lastCategory) then\r
-        AddRow("Subtotal",subtotals(0),subtotals(1))\r
-        ex1.SetRowAttr("class","Subtotal")\r
+        AddRow("Subtotal",subtotals(0),subtotals(1),"Subtotal")\r
       end if\r
       ex1.AddDataRow\r
-      ex1.SetRowAttr("class","CatHead")\r
-      ex1.AddCell(category)\r
-      ex1.AddCell("")\r
-      ex1.AddCell("")\r
-      ex1.AddCell("")\r
-      ex1.AddCell("")\r
+      ex1.AddCell(new SimpleGrid.TextCell(category, "CatHead"))\r
+      ex1.AddCell(new SimpleGrid.TextCell("", "CatHead"))\r
+      ex1.AddCell(new SimpleGrid.TextCell("", "CatHead"))\r
+      ex1.AddCell(new SimpleGrid.TextCell("", "CatHead"))\r
+      ex1.AddCell(new SimpleGrid.TextCell("", "CatHead"))\r
       for i=0 to 1\r
         subtotals(i)=0\r
       next\r
@@ -58,36 +48,30 @@ Sub Page_Load(Sender As object, e As EventArgs)
     grandtotals(0)+=Gross\r
     subtotals(1)+=Discounts\r
     grandtotals(1)+=Discounts\r
-    AddRow(rdr("ProductName"),Gross,Discounts)\r
+    AddRow(rdr("ProductName"),Gross,Discounts,"")\r
   end while\r
   rdr.Close()\r
   if not IsNothing(lastCategory) then\r
-    AddRow("Subtotal",subtotals(0),subtotals(1))\r
-    ex1.SetRowAttr("class","Subtotal")\r
+    AddRow("Subtotal",subtotals(0),subtotals(1),"Subtotal")\r
   end if\r
-  AddRow("Grand Total",grandtotals(0),grandtotals(1))\r
-  ex1.SetRowAttr("class","GrandTotal")\r
+  AddRow("Grand Total",grandtotals(0),grandtotals(1),"GrandTotal")\r
 End Sub\r
 \r
-sub AddRow(ProductName as String, Gross as Double, Discounts as Double)\r
+sub AddRow(ProductName as String, Gross as Double, Discounts as Double, StyleId as String)\r
   dim pct as double\r
   ex1.AddDataRow()\r
-  ex1.AddCell(ProductName)\r
-  ex1.AddCell("$" & FormatNumber(Gross,0,-1,0,-1))\r
-  ex1.SetCellAttr("class","number")\r
-  ex1.AddCell("$" & FormatNumber(Discounts,0,-1,0,-1))\r
-  ex1.SetCellAttr("class","number")\r
-  ex1.AddCell("$" & FormatNumber(Gross-Discounts,0,-1,0,-1))\r
-  ex1.SetCellAttr("class","number")\r
+  ex1.AddCell(new SimpleGrid.TextCell(ProductName, StyleId))\r
+  ex1.AddCell(new SimpleGrid.NumberCell(Gross, StyleId & "Number"))\r
+  ex1.AddCell(new SimpleGrid.NumberCell(Discounts, StyleId & "Number"))\r
+  ex1.AddCell(new SimpleGrid.NumberCell(Gross-Discounts, StyleId & "Number"))\r
   pct=Discounts/Gross\r
-  ex1.AddCell(pct.toString("0%"))\r
-  ex1.SetCellAttr("class","number")\r
+  ex1.AddCell(new SimpleGrid.NumberCell(pct, StyleId & "Percent"))\r
 end sub\r
 \r
 Protected Overrides Sub Render(writer as HTMLTextWriter)\r
   select case lcase(Request.QueryString("fmt"))\r
-    case "xl":  ex1.RenderExcel("rico.xls")\r
-    case "csv": ex1.RenderDelimited("rico.csv", ",", "")\r
+    case "xl":  ex1.RenderExcel("ProductSalesSummary.xml")\r
+    case "csv": ex1.RenderDelimited("ProductSalesSummary.csv")\r
     case else:  MyBase.Render(writer)   ' output html\r
   end select\r
 End Sub\r
@@ -117,30 +101,6 @@ function ExportGridServer(ExportType) {
 }\r
 </script>\r
 \r
-<style type="text/css">\r
-.CatHead {\r
-  background:blue;\r
-  color:white;\r
-  font-weight:bold !important;\r
-}\r
-.Subtotal {\r
-  background:#888;\r
-  color:white;\r
-  font-weight:bold !important;\r
-}\r
-.GrandTotal {\r
-  background:black;\r
-  color:white;\r
-  font-weight:bold !important;\r
-}\r
-div.ricoLG_cell {\r
-  white-space:nowrap;\r
-}\r
-.number {\r
-  text-align: right;\r
-}\r
-</style>\r
-\r
 </head>\r
 \r
 <body>\r
@@ -167,14 +127,23 @@ can be formatted individually.
 <button onclick="ExportGridServer('csv')">Export from server<br>to CSV</button>\r
 </div>\r
 \r
-<Rico:SimpleGrid runat='server' id='ex1' FrozenCols='1'>\r
-  <Rico:Column runat='server' width='200' />\r
-  <Rico:Column runat='server' />\r
-  <Rico:Column runat='server' />\r
-  <Rico:Column runat='server' />\r
-  <Rico:Column runat='server' />\r
+<Rico:SimpleGrid runat='server' id='ex1' frozenColumns='1'>\r
+  <Rico:SimpleStyle runat='server' StyleID='CatHead' bgcolor="blue" color="white" bold="true" />\r
+  <Rico:SimpleStyle runat='server' StyleID='Subtotal' bgcolor="#888888" color="white" bold="true" />\r
+  <Rico:SimpleStyle runat='server' StyleID='GrandTotal' bgcolor="black" color="white" bold="true" />\r
+  <Rico:SimpleStyle runat='server' StyleID='Number' NumberFormat="$#,##0" align="right" />\r
+  <Rico:SimpleStyle runat='server' StyleID='SubtotalNumber' NumberFormat="$#,##0" align="right" bgcolor="#888888" color="white" bold="true" />\r
+  <Rico:SimpleStyle runat='server' StyleID='GrandTotalNumber' NumberFormat="$#,##0" align="right" bgcolor="black" color="white" bold="true" />\r
+  <Rico:SimpleStyle runat='server' StyleID='Percent' NumberFormat="0%" align="right" />\r
+  <Rico:SimpleStyle runat='server' StyleID='SubtotalPercent' NumberFormat="0%" align="right" bgcolor="#888888" color="white" bold="true" />\r
+  <Rico:SimpleStyle runat='server' StyleID='GrandTotalPercent' NumberFormat="0%" align="right" bgcolor="black" color="white" bold="true" />\r
+\r
+  <Rico:SimpleCol runat='server' heading="Product" width='200' />\r
+  <Rico:SimpleCol runat='server' heading="Gross Sales" />\r
+  <Rico:SimpleCol runat='server' heading="Discounts" />\r
+  <Rico:SimpleCol runat='server' heading="Net Sales" />\r
+  <Rico:SimpleCol runat='server' heading="Avg Discount" />\r
 </Rico:SimpleGrid>\r
 \r
 </body>\r
 </html>\r
-\r
index c640932..ced18d0 100644 (file)
@@ -29,10 +29,10 @@ Rico.GridCommon = {
       click            : null,
       dblclick         : null,
       contextmenu      : null,
-      menuEvent        : 'dblclick',  // event that triggers menus - click, dblclick, contextmenu, or none (no menus)
-      defaultWidth     : -1,          // if -1, then use unformatted column width
-      scrollBarWidth   : 19,          // this is the value used in positioning calculations, it does not actually change the width of the scrollbar
-      minScrollWidth   : 100,         // min scroll area width when width of frozen columns exceeds window width
+      menuEvent        : null,      // event that triggers menus - click, dblclick, contextmenu, or none (no menus)
+      defaultWidth     : -1,        // if -1, then use unformatted column width
+      scrollBarWidth   : 19,        // this is the value used in positioning calculations, it does not actually change the width of the scrollbar
+      minScrollWidth   : 100,       // min scroll area width when width of frozen columns exceeds window width
       frozenColumns    : 0,
       exportWindow     : "height=400,width=500,scrollbars=1,menubar=1,resizable=1,location=0,toolbar=0,status=0",
       exportStyleList  : ['background-color','color','text-align','font-weight','font-size','font-family'],
@@ -212,7 +212,7 @@ Rico.GridCommon = {
  */
   createDivs: function() {
     Rico.log("createDivs start");
-    this.outerDiv   = this.createDiv("outer");
+    this.outerDiv = this.createDiv("outer");
     if (Rico.theme.gridContainer) Rico.addClass(this.outerDiv,Rico.theme.gridContainer);
     if (this.outerDiv.firstChild && this.outerDiv.firstChild.tagName && this.outerDiv.firstChild.tagName.toUpperCase()=='TABLE') {
       this.structTab=this.outerDiv.firstChild;
index 6c89dc1..61030c1 100644 (file)
@@ -535,8 +535,8 @@ Rico.LiveGrid.prototype = {
 
     this.bookmark=document.getElementById(this.tableId+"_bookmark");
     this.sizeDivs();
-    var filterUIrow=this.buffer.options.canFilter ? this.options.FilterLocation : false;
-    if (typeof(filterUIrow)=='number' && filterUIrow<0)
+    var filterUIrow=-1;
+    if (this.buffer.options.canFilter && this.options.AutoFilter)
       filterUIrow=this.addHeadingRow('ricoLG_FilterRow');
     this.createDataCells(this.options.visibleRows);
     if (this.pageSize == 0) return;
@@ -561,7 +561,7 @@ Rico.LiveGrid.prototype = {
       this.scrollToRow(this.options.offset);
       this.buffer.fetch(this.options.offset);
     }
-    if (typeof(filterUIrow)=='number')
+    if (filterUIrow >= 0)
       this.createFilters(filterUIrow);
     this.scrollEventFunc=Rico.eventHandle(this,'handleScroll');
     this.wheelEventFunc=Rico.eventHandle(this,'handleWheel');
@@ -643,7 +643,7 @@ Rico.LiveGridMethods = {
       var theads=table.getElementsByTagName("thead");
       if (theads.length == 1) {
         Rico.log("createTables: using thead section, id="+this.tableId);
-        if (this.options.PanelNamesOnTabHdr && this.options.panels) {
+        if (this.options.ColGroupsOnTabHdr && this.options.ColGroups) {
           var r=theads[0].insertRow(0);
           this.insertPanelNames(r, 0, this.options.frozenColumns, 'ricoFrozen');
           this.insertPanelNames(r, this.options.frozenColumns, this.options.columnSpecs.length);
@@ -733,7 +733,7 @@ Rico.LiveGridMethods = {
     } else {
       this.createHdr(0,0,this.options.frozenColumns);
       this.createHdr(1,this.options.frozenColumns,this.options.columnSpecs.length);
-      if (this.options.PanelNamesOnTabHdr && this.options.panels) {
+      if (this.options.ColGroupsOnTabHdr && this.options.ColGroups) {
         this.insertPanelNames(this.thead[0].insertRow(0), 0, this.options.frozenColumns);
         this.insertPanelNames(this.thead[1].insertRow(0), this.options.frozenColumns, this.options.columnSpecs.length);
       }
@@ -935,15 +935,15 @@ Rico.LiveGridMethods = {
     r.className='ricoLG_hdg';
     var lastIdx=-1, span, newCell=null, spanIdx=0;
     for( var c=start; c < limit; c++ ) {
-      if (lastIdx == this.options.columnSpecs[c].panelIdx) {
+      if (lastIdx == this.options.columnSpecs[c].ColGroupIdx) {
         span++;
       } else {
         if (newCell) newCell.colSpan=span;
         newCell = r.insertCell(-1);
         if (cellClass) newCell.className=cellClass;
         span=1;
-        lastIdx=this.options.columnSpecs[c].panelIdx;
-        newCell.innerHTML=this.options.panels[lastIdx];
+        lastIdx=this.options.columnSpecs[c].ColGroupIdx;
+        newCell.innerHTML=this.options.ColGroups[lastIdx];
       }
     }
     if (newCell) newCell.colSpan=span;
index e616ab5..80894f7 100644 (file)
@@ -103,7 +103,7 @@ Rico.TableEdit.prototype = {
   
   createWindow: function() {
     var self=this;
-    return new Rico.Window('', {closeFunc: function() { self.makeFormInvisible(); }, overflow: this.options.panels ? 'hidden' : 'auto'});
+    return new Rico.Window('', {closeFunc: function() { self.makeFormInvisible(); }, overflow: this.options.ColGroups ? 'hidden' : 'auto'});
   },
 
   initPanelGroup: function() {
@@ -117,7 +117,6 @@ Rico.TableEdit.prototype = {
       this.options.bgColor = Rico.Color.createColorFromBackground(this.form).toString();
     }
     this.formPopup.container.style.display='none';
-    //this.options.panelHdrWidth=(Math.floor(wi / this.options.panels.length)-20)+'px';
     this.formPanels=new Rico.TabbedPanel(this.panelGroup, this.options);
   },
 
@@ -174,7 +173,7 @@ Rico.TableEdit.prototype = {
       if (!fldSpec.EntryType) continue;
       if (fldSpec.EntryType=='H') continue;
       if (fldSpec.FormView && fldSpec.FormView=="hidden") continue;
-      var panelIdx=fldSpec.panelIdx || 0;
+      var panelIdx=fldSpec.ColGroupIdx || 0;
       if (panelIdx==i) {
         hasFields=true;
         break;
@@ -182,7 +181,7 @@ Rico.TableEdit.prototype = {
     }
     if (!hasFields) return null;
     this.panelHdr[i] = document.createElement('li');
-    this.panelHdr[i].innerHTML=this.options.panels[i];
+    this.panelHdr[i].innerHTML=this.options.ColGroups[i];
     this.panelHdrs.appendChild(this.panelHdr[i]);
     this.panelContent[i] = document.createElement('div');
     this.panelContents.appendChild(this.panelContent[i]);
@@ -195,7 +194,7 @@ Rico.TableEdit.prototype = {
     this.panelCnt=0;
     this.panelHdr=[];
     this.panelContent=[];
-    if (this.options.panels) {
+    if (this.options.ColGroups) {
       this.panelGroup = document.createElement('div');
       this.panelGroup.className='tabPanelGroup';
       this.panelHdrs = document.createElement('ul');
@@ -206,11 +205,11 @@ Rico.TableEdit.prototype = {
       this.panelActualIdx=[];
       parentDiv.appendChild(this.panelGroup);
       if (this.grid.direction=='rtl') {
-        for (i=this.options.panels.length-1; i>=0; i--) {
+        for (i=this.options.ColGroups.length-1; i>=0; i--) {
           tables[i]=this.createPanel(i);
         }
       } else {
-        for (i=0; i<this.options.panels.length; i++) {
+        for (i=0; i<this.options.ColGroups.length; i++) {
           tables[i]=this.createPanel(i);
         }
       }
@@ -224,7 +223,7 @@ Rico.TableEdit.prototype = {
     for (i=0; i<this.grid.columns.length; i++) {
       fldSpec=this.grid.columns[i].format;
       if (!fldSpec) continue;
-      panelIdx=fldSpec.panelIdx || 0;
+      panelIdx=fldSpec.ColGroupIdx || 0;
       if (tables[panelIdx]) this.appendFormField(this.grid.columns[i],tables[panelIdx]);
       if (typeof fldSpec.pattern=='string') {
         switch (fldSpec.pattern) {
@@ -871,7 +870,7 @@ Rico.TableEdit.prototype = {
 
   validationMsg: function(elem,colnum,phraseId) {
     var col=this.grid.columns[colnum];
-    if (this.formPanels) this.formPanels.select(this.panelActualIdx[col.format.panelIdx]);
+    if (this.formPanels) this.formPanels.select(this.panelActualIdx[col.format.ColGroupIdx]);
     var label=Rico.stripTags(col.formLabel.innerHTML).replace(/&nbsp;/g,' ');
     var msg=Rico.getPhraseById(phraseId," \"" + label + "\"");
     Rico.log(' Validation error: '+msg);
index bbb6685..6366850 100644 (file)
@@ -105,7 +105,6 @@ buildGridMenu: function(r,c) {
       this.exportmenu.addMenuItemId("gridmenuExportAll2SS", function() { buffer.printAllSQL('xl'); }, buffer.totalRows <= maxprint);
     } else {
       // any other buffer
-      this.addSubMenuItem(Rico.getPhraseById('gridmenuExport'),this.exportmenu,false);
       this.exportmenu.addMenuItemId("gridmenuExportVis2Web", function() { buffer.printVisible(); });
       this.exportmenu.addMenuItemId("gridmenuExportAll2Web", function() { buffer.printAll(); }, buffer.totalRows <= maxprint);
     }
index bcb94c2..8ccd99e 100644 (file)
@@ -43,9 +43,9 @@ Rico.SimpleGrid.prototype = {
     var i;
     for (i=0; i<2; i++) {
       Rico.log("simpleGridInit "+i);\r
-      this.tabs[i]=document.getElementById(this.tableId+'_tab'+i);
+      this.tabs[i]=Rico.$(this.tableId+'_tab'+i);
       if (!this.tabs[i]) return;
-      this.hdrTabs[i]=document.getElementById(this.tableId+'_tab'+i+'h');
+      this.hdrTabs[i]=Rico.$(this.tableId+'_tab'+i+'h');
       if (!this.hdrTabs[i]) return;
       this.thead[i]=this.hdrTabs[i];
       this.tbody[i]=this.tabs[i];
index cdc61e0..ed1860a 100644 (file)
@@ -2600,8 +2600,8 @@ return
 if(this.options.headingSort=="hover"){this.createHoverSet()
 }this.bookmark=document.getElementById(this.tableId+"_bookmark");
 this.sizeDivs();
-var a=this.buffer.options.canFilter?this.options.FilterLocation:false;
-if(typeof(a)=="number"&&a<0){a=this.addHeadingRow("ricoLG_FilterRow")
+var a=-1;
+if(this.buffer.options.canFilter&&this.options.AutoFilter){a=this.addHeadingRow("ricoLG_FilterRow")
 }this.createDataCells(this.options.visibleRows);
 if(this.pageSize==0){return
 }this.buffer.registerGrid(this);
@@ -2619,7 +2619,7 @@ if(this.buffer.totalRows>0){this.updateHeightDiv()
 }if(this.options.canFilterDefault&&this.options.getQueryParms){this.checkForFilterParms()
 }this.scrollToRow(this.options.offset);
 this.buffer.fetch(this.options.offset)
-}if(typeof(a)=="number"){this.createFilters(a)
+}if(a>=0){this.createFilters(a)
 }this.scrollEventFunc=Rico.eventHandle(this,"handleScroll");
 this.wheelEventFunc=Rico.eventHandle(this,"handleWheel");
 this.wheelEvent=(Rico.isIE||Rico.isOpera||Rico.isWebKit)?"mousewheel":"DOMMouseScroll";
@@ -2662,7 +2662,7 @@ var e=document.getElementById(this.tableId)||document.getElementById(this.tableI
 if(!e){return false
 }if(e.tagName.toLowerCase()=="table"){var a=e.getElementsByTagName("thead");
 if(a.length==1){Rico.log("createTables: using thead section, id="+this.tableId);
-if(this.options.PanelNamesOnTabHdr&&this.options.panels){var d=a[0].insertRow(0);
+if(this.options.ColGroupsOnTabHdr&&this.options.ColGroups){var d=a[0].insertRow(0);
 this.insertPanelNames(d,0,this.options.frozenColumns,"ricoFrozen");
 this.insertPanelNames(d,this.options.frozenColumns,this.options.columnSpecs.length)
 }g=a[0].rows
@@ -2727,7 +2727,7 @@ if(f){f.parentNode.insertBefore(this.outerDiv,f)
 this.loadHdrSrc(g)
 }else{this.createHdr(0,0,this.options.frozenColumns);
 this.createHdr(1,this.options.frozenColumns,this.options.columnSpecs.length);
-if(this.options.PanelNamesOnTabHdr&&this.options.panels){this.insertPanelNames(this.thead[0].insertRow(0),0,this.options.frozenColumns);
+if(this.options.ColGroupsOnTabHdr&&this.options.ColGroups){this.insertPanelNames(this.thead[0].insertRow(0),0,this.options.frozenColumns);
 this.insertPanelNames(this.thead[1].insertRow(0),this.options.frozenColumns,this.options.columnSpecs.length)
 }for(b=0;
 b<2;
@@ -2860,13 +2860,13 @@ a.className="ricoLG_hdg";
 var i=-1,j,e=null,g=0;
 for(var h=b;
 h<d;
-h++){if(i==this.options.columnSpecs[h].panelIdx){j++
+h++){if(i==this.options.columnSpecs[h].ColGroupIdx){j++
 }else{if(e){e.colSpan=j
 }e=a.insertCell(-1);
 if(f){e.className=f
 }j=1;
-i=this.options.columnSpecs[h].panelIdx;
-e.innerHTML=this.options.panels[i]
+i=this.options.columnSpecs[h].ColGroupIdx;
+e.innerHTML=this.options.ColGroups[i]
 }}if(e){e.colSpan=j
 }},createHdr:function(d,g,b){Rico.log("createHdr: i="+d+" start="+g+" limit="+b);
 var a=this.thead[d].insertRow(-1);
@@ -3868,8 +3868,7 @@ this.exportmenu.addMenuItemId("gridmenuExportVis2SS",function(){f.printVisibleSQ
 });
 this.exportmenu.addMenuItemId("gridmenuExportAll2SS",function(){f.printAllSQL("xl")
 },f.totalRows<=n)
-}else{this.addSubMenuItem(Rico.getPhraseById("gridmenuExport"),this.exportmenu,false);
-this.exportmenu.addMenuItemId("gridmenuExportVis2Web",function(){f.printVisible()
+}else{this.exportmenu.addMenuItemId("gridmenuExportVis2Web",function(){f.printVisible()
 });
 this.exportmenu.addMenuItemId("gridmenuExportAll2Web",function(){f.printAll()
 },f.totalRows<=n)
@@ -4276,7 +4275,7 @@ if(this.panelGroup){Rico.log("createEditDiv complete, requestCount="+this.reques
 Rico.runLater(50,this,"initPanelGroup")
 }},createWindow:function(){var a=this;
 return new Rico.Window("",{closeFunc:function(){a.makeFormInvisible()
-},overflow:this.options.panels?"hidden":"auto"})
+},overflow:this.options.ColGroups?"hidden":"auto"})
 },initPanelGroup:function(){this.requestCount--;
 Rico.log("initPanelGroup: "+this.requestCount);
 if(this.requestCount>0){return
@@ -4325,12 +4324,12 @@ if(!a){continue
 }if(!a.EntryType){continue
 }if(a.EntryType=="H"){continue
 }if(a.FormView&&a.FormView=="hidden"){continue
-}var d=a.panelIdx||0;
+}var d=a.ColGroupIdx||0;
 if(d==c){e=true;
 break
 }}if(!e){return null
 }this.panelHdr[c]=document.createElement("li");
-this.panelHdr[c].innerHTML=this.options.panels[c];
+this.panelHdr[c].innerHTML=this.options.ColGroups[c];
 this.panelHdrs.appendChild(this.panelHdr[c]);
 this.panelContent[c]=document.createElement("div");
 this.panelContents.appendChild(this.panelContent[c]);
@@ -4340,7 +4339,7 @@ return this.createFormTable(this.panelContent[c],"tabContent")
 this.panelCnt=0;
 this.panelHdr=[];
 this.panelContent=[];
-if(this.options.panels){this.panelGroup=document.createElement("div");
+if(this.options.ColGroups){this.panelGroup=document.createElement("div");
 this.panelGroup.className="tabPanelGroup";
 this.panelHdrs=document.createElement("ul");
 this.panelGroup.appendChild(this.panelHdrs);
@@ -4349,11 +4348,11 @@ this.panelContents.className="tabContentContainer";
 this.panelGroup.appendChild(this.panelContents);
 this.panelActualIdx=[];
 e.appendChild(this.panelGroup);
-if(this.grid.direction=="rtl"){for(c=this.options.panels.length-1;
+if(this.grid.direction=="rtl"){for(c=this.options.ColGroups.length-1;
 c>=0;
 c--){b[c]=this.createPanel(c)
 }}else{for(c=0;
-c<this.options.panels.length;
+c<this.options.ColGroups.length;
 c++){b[c]=this.createPanel(c)
 }}e.appendChild(this.panelGroup)
 }else{f=document.createElement("div");
@@ -4364,7 +4363,7 @@ e.appendChild(f)
 c<this.grid.columns.length;
 c++){a=this.grid.columns[c].format;
 if(!a){continue
-}d=a.panelIdx||0;
+}d=a.ColGroupIdx||0;
 if(b[d]){this.appendFormField(this.grid.columns[c],b[d])
 }if(typeof a.pattern=="string"){switch(a.pattern){case"email":a.regexp=/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$/;
 break;
@@ -4766,7 +4765,7 @@ d["_k"+c]=e
 }new Rico.ajaxRequest(this.options.updateURL,{parameters:d,method:"post",onComplete:this.responseHandler})
 }this.menu.cancelmenu()
 },validationMsg:function(d,c,e){var b=this.grid.columns[c];
-if(this.formPanels){this.formPanels.select(this.panelActualIdx[b.format.panelIdx])
+if(this.formPanels){this.formPanels.select(this.panelActualIdx[b.format.ColGroupIdx])
 }var a=Rico.stripTags(b.formLabel.innerHTML).replace(/&nbsp;/g," ");
 var f=Rico.getPhraseById(e,' "'+a+'"');
 Rico.log(" Validation error: "+f);