Developer Utility
  • Home
  • Orders
  • Checkout
  • FAQ
    MDI Browser
    SQL Grid
  • About Us

View Demo

Save time and effort, build a web native application with the complete developer utility suite.

Association of Shareware Professionals

OISV - Organization of Independent Software Vendors - Contributing Member
FAQ - SQL Web Grid Editor

SQL Web Grid Editor object

[Q] How many column/field type do you support?
[Q] Can we select two (or more) rows?
[Q] Can we insert picture in the grid?
[Q] Can we keep the cell content before it's edition?
[Q] Can we move the active cell to the next adjacent left or right position after typing?
[Q] Can we block/stripe out specific character/word during/after data edition?
[Q] Can we lock a record on the server side database when it is being edit so no other user can modify the record until the change have been commit?
[Q] What keyboard language do you support?
[Q] Can we resize column?
[Q] Can we have two (or more) filters box (one for each grid) in the same browser page?
[Q] How many table can we link together (SQL join)?
[Q] Can we link external data entry island with the grid?
[Q] How do we generate keyfield for new record (adding row)?
[Q] How do we delete row(s) on the server side database?
[Q] How do we build our paging?
[Q] Can we apply formating on column/field type display?
[Q] How do I generate my xml head/body template?
[Q] How many rows can a grid contain?
[Q] Why do you run the demo/filter with xsl?
[Q] How come the demo don't work in Opera, Chrome and Safari?
[Q] Can we have more than three filter condition?
[Q] Can we use your xsl query engine for xml sorting/filtering in our project?
[Q] Can we change multiple rows before calling the server side data saving?
[Q] Can we change the look and field of the grid?
[Q] Can we join two (or more) tables together in the same grid?
[Q] Can we join two tables be a third one containing the keyfield of both in the same grid?
[Q] Can we show/hide column display in the browser?
[Q] Can we save the current user filter on the server side so he can request it's back the next day?
[Q] Can we open/change a grid with a custom "per user" or "per grid" filter?
[Q] Can we open/change a grid with a custom "per user" column width?
[Q] Can we put specific column in the grid to read only?
[Q] Can we put the entire grid in real only?
[Q] Can the grid support MDI interface (meaning the same grid in two independent window)?
[Q] Do you support Json?
[Q] How can I translate the filter box into another language?
[Q] How can I translate the grid column/field header into another language?
[Q] How can we link custom type column/field with the filter box so the condition change dynamically just like the demo?
[Q] Do we have to display every column/field of our database table (can we permanently hide column)?
[Q] Can we apply security on the grid/filter?
[Q] What are the grid properties?
[Q] What are the grid methods?
[Q] What are the grid events?
[Q] What are the filter events?
[Q] What are the hyperlink events?
[Q] What are the paging (page X of Y) events?

Miscellaneous

[Q] Do we need to install module on the server side to run the code libraries?
[Q] Is your products compatibles with the major browser i.e. IE 6, IE 7, Firefox, Safari and Opera, etc?
[Q] Do we need to do server side scripting like PHP, ASP or JSP to run the libraries?
[Q] Does it require any specific server configuration?
[Q] What is the system requirement in order to run the product?
[Q] Do your provide update of the software?
[Q] What do you consider a domain?
[Q] Can we redistribute your product in our application?
[Q] What are the refund/exchange policy?
[Q] What is your security and privacy policy?
[Q] I have another question?



[Q] How many column/field type do you support?
[A] You can add as many column/field type as you want (big int, small int, time, etc). By default, the grid contain 9 distinct column type: string, stringstrict, int, date, float, picture, hyperlink, select and checkbox. You can also apply custom entry rule (substract, multiply) and/or validation on each type.

To get a complete description of all default type, please refer to the TableHead.xml file contain in the demo.

[Q] Can we select two (or more) rows?
[A] To select two (or more) rows in the same grid, just hold the keyboard shift/control key and click on other row(s) with your mouse.

[Q] Can we insert picture in the grid?
[A] Yes, just set the column/field type to "picture" in the xml head properties and image will be will create inside the grid. You can take advantage of query string in the src attribute to get picture comming from database storage.

[Q] Can we keep the cell content before it's edition?
[A] Yes, press "F2" to keep the original cell content before edition. Press "ESC" to cancel cell change.

[Q] Can we move the active cell to the next adjacent left or right position after typing?
[A] Yes, just change the "movetonextcelldirection" xml head property to left or right. If you do not set this value, the grid object will keep the focus on the cell edited.

[Q] Can we block/stripe out specific character/word during/after data edition?
[A] Yes, the grid have two events specifically design to answer this feature. (1) The "ValidateInputOnKeyDown". It is call every time the user type a character. (2) The "ValidateInputAfterChange". It is call every time the content of a grid cell change (after the user have press "ENTER"). You can write any custom coding in those events to transform/restrict user data entry.

[Q] Can we lock a record on the server side database when it is being edit so no other user can modify the record until the change have been commit?
[A] Yes, the grid have two events specifically design to answer this feature. (1) The "OnGridCellEdition". This function is call every time the content of a grid cell is edit (when the user type his first character inside the cell). (2) The "OnGridCellEditionCancel". This function is call every time the content of a grid cell in edition is being cancel (when the user have press the "ESC" keyboard key).

You can then, unlock the record on the server side when the user save it's change via the event "SaveDataEntry".

[Q] What keyboard language do you support?
[A] By default, the grid setting are made for North America Standard, meaning US, FRENCH-Canada and ENGLISH-Canada keyboard. The cell edition already support UTF-8 character i.e. anglo-saxon (English, German), latin (French, Spanish, Italian, Portuguese) and baltic/cyrillic (Russian, Latvian, Ukrainian).

For other keyboard input, to support data entry validation inside the grid cell, you will have to change some constant(s) variable(s) in the JsGridConstant.js file and the "GetKeyEnter" function in the JsToolBox.js file.

[Q] Can we resize column?
[A] Yes, just click and drag the top right corner of the grid header.

[Q] Can we have two (or more) filters box (one for each grid) in the same browser page?
[A] Yes, each grid have it's own filter. You can display/hide or turn on/off each of them.

[Q] How many table can we link together (SQL join)?
[A] The number of table link together is unlimited. The grid have one event specifically design to make SQL table join easier. The "OnGridRowSelect" event is call every time the row of a grid is select (by mouse selection or arrow-up or down). You can have multi-heritage link. For example, (1) a grid can be link to two (or more) other grid i.e. parent-child-child and/or (2) a grid can be link to an already link grid i.e. parent-parent-child relation.

[Q] Can we link external data entry island with the grid?
[A] Yes, the grid have one event specifically design to link external data entry island. The "OnGridRowSelect" event is call every time the row of a grid is select (by mouse selection or arrow-up or down). You can easily get the key of the record select and get all information relative to that record by doing a server side query.

[Q] How do we generate keyfield for new record (adding row)?
[A] The grid have two events specifically design to add new record. (1) The "AddRowInGrid" event is call every time the "add row icon" is trigger. (2) The "SaveDataEntry" event is call every time the "save data icon" is trigger. You can, of course, decide to add the keyfield(s) value(s) before of after the user save the data on the server side data base.

[Q] How do we delete row(s) on the server side database?
[A] The grid have one event specifically design to delete record. (1) The "DeleteRowInGrid" event is call every time the "delete row icon" is trigger. From there, you can easily call your server side data base to delete the selected record.

[Q] How do we build our paging?
[A] Paging come include in the grid. The "RefreshGrid" event get the user filter request, call the server database, display the result in the grid and call the "RefreshPageXofY" event to update the paging. The only parameter you need to past inside this event is the total number of row and the row per page. To change the number of page display in the browser, you will have to change the variable "maxPage" in the JsConstant.js file.

You can of course change the default location (bottom left) by modifying the browser DOM. Search for the keyword "gridShowPageOf" in the Demo1.htm and Demo2.htm file.

[A] On the server side, for good examples on how to build fast SQL query for paging recordsets in MySQL or SQL Server please take a look at those demo:

Ex: SQL 2005
USE Test
SELECT *
FROM (SELECT TOP 20 ROW_NUMBER() OVER (ORDER BY CandidateID ASC)
AS Row, CandidateID, FirstName, LastName FROM Candidate)
AS CandidatePaging
WHERE Row >= 11 AND Row <= 20
Ex: MySQL
SELECT * FROM Candidate LIMIT 10, 10
For more detail on the SQL query. please refer to those site:
- SQL Server 2005
- SQL Server 2005, SQL Server 2000, MS Access and MySQL
- SQL Server 2000 & 2005
- SQL Server 2000 & 2005
- SQL Server 2005
- SQL Server 2000 & 2005

[Q] Can we apply formating on column/field type display?
[A] Yes, any column/field type can have it's own formating (date, big int, etc). Identify your special column formating (like dollars in our example), change the column format property in the xml head and write (if needed) custom handeling in the event FormatCellContent and UnFormatCellContent.

[Q] How do I generate my xml head/body template?
[A] We have already done the work for you. There is a .NET and PHP script reading all your database tables/fields that generate the xml in proper formating for the grid to work. You will probably have to change minor script line (like the folder saving location) in order for the script to work.

Please refer to the DemoXmlBody.aspx(.vb) and DemoXmlHead.aspx(.vb) for the .NET generator.
Please refer to the DemoXmlBody.php and DemoXmlHead.php for the PHP generator.

To get a complete description of all node name/property/option of the xml head template, please refer to the TableHead.xml file contain in the demo.

[Q] How many rows can a grid contain?
[A] Our current test indicate good performance with 500 to 1000 records per grid. Of course, it all depend on your server side database speed, bandwidth and the number of column/field display per grid. For extra large table record, the paging and filter option will solve performance problem.

[Q] Why do you run the demo/filter with xsl?
[A] Since the grid work on any server platform (IIS, Apache, etc) and we cannot be sure of the database type your are using (MySQL, SQL Server, etc), we are using a "platform-free" query engine i.e. xsl. The other reason is to avoid database installation for viewing our demo.

[Q] How come the demo don't work in Opera, Chrome and Safari?
[A] Opera, Chrome and Safari are not supporting the demo since it was made for standalone installation on your localhost using XSL to replicate the server side SQL database query (filtering, sorting, etc). It will work perfectly in those browser once the grid is connect to a real database back-end.

[Q] Can we have more than three filter condition?
[A] Yes, by default we are showing three query filter condition. To add less/more condition, you have to change the "filterColumnDisplayNumber" variable in the JsConstant.js file.

[Q] Can we use your xsl query engine for xml sorting/filtering in our project?
[A] Of course you can. Feel free to use this xml/xsl filter engine in all your project.

[Q] Can we change multiple rows before calling the server side data saving?
[A] Yes, you can allow/disallow multiple row change before the "SaveDataEntry" event is call. Simply modify the xml head property "saveoneachrowchange" to "1" for single row change or to "0" for multiple rows change.

[Q] Can we change the look and field of the grid?
[A] Yes. The grid come with classic .css style. Each grid can have it's own style. To change the look and field of every/specific grid, (1) change the xml head property "class" (by default is is link with the .css style "grid") to another name. (2) copy and rename the GridEditor.css file. (3) Change the .grid class name to match your new class property name. (4) Apply new style inside your new .css file.

[Q] Can we join two (or more) tables together in the same grid?
[A] Yes. Usually done to display "read-only" grid but you can allow user to modify the grid with extra coding on the server side. You will have to create manually the xml head template with the two (or more) tables you wish to display in the same grid. Each column must have independant name (ex: TableName.ColumnName).

On the server side, you will have to write code to handle the grid query "multi table request". You can easily do this since each grid have unique ID (ex: ServerName.TableName). On the client side, the grid and all it's validation, event, properties remain the same.

[Q] Can we join two tables be a third one containing the keyfield of both in the same grid?
[A] Yes. This is a classic database design "one to multi" relation. A typical example is to link student with their given course. The database table to handle this can only contain two fields (the keyfield of the course and the keyfield of the student).

Usually done to display "read-only" grid but you can allow user to modify the grid with extra coding on the server side. You will have to create manually the xml head template with the two (or more) tables you wish to display in the same grid. Each column must have independant name (ex: TableName.ColumnName).

On the server side, you will have to write code to handle the grid query "multi table request". You can easily do this since each grid have unique ID (ex: ServerName.TableName). On the client side, the grid and all it's validation, event, properties remain the same.

[Q] Can we show/hide column display in the browser?
[A] Yes. This is done via the filter box. Simply select the column(s) you with to display. By default you can hide/display column of each grid with the xml head template. Simply modify the xml head property "show" to "1" to display the column or to "0" to hide it. All column inside the xml head template will be display in the filter box. The user can then, decide the one he wish to see.

[Q] Can we save the current user filter on the server side so he can request it's back the next day?
[A] Yes. At any given time, you can get the current user filter apply on your server side database table with the currentGrid.getFilter() and/or currentGrid.getFilterXml() properties. All you need to do is save this template filter on the server side for future use.

There is also the currentGrid.getFilterRequest() property to get the user filter without all the extra html node tag. This is normally use as server side transport to refresh the grid after the user have apply some filtering on the grid.

[Q] Can we open/change a grid with a custom "per user" or "per grid" filter?
[A] Yes. At any given time, you can get the current user filter apply on your server side database table with the currentGrid.getFilter() and/or currentGrid.getFilterXml() properties.

All you need to do is:
(1) save this template filter on the server side for future use.
(2) have a default filter is the user did not save any custom filter for the grid.
(3*) Link the custom filter request at grid opening.
(4) Allow user to have more than one custom filter per grid if desire.

* This is usually done after the grid initiation. A default filter template, one for each grid, will be link to every grid at initiation. For example, you might want to download from the server side personalise filter save by the user. To override the default filter associate with the newly create grid, (a) download your custom filter, (b) get the grid object and (c) set the custom filter, a DOM element, to the grid. Something like:

======================
// Initiate the Grid Marshall object
var oTable = BuildGrid(xmlGrid);

// Get the current grid object
var oNodeHead = xmlGrid.selectSingleNode(xPathQueryHead);
var currentGridID = oNodeHead.getAttribute(""id"");
var currentGrid = arrGridMarshall[currentGridID];

// Apply custom filter to grid
currentGrid.setFilter(domFilter);
======================

There is also the currentGrid.getFilterRequest() property to get the user filter without all the extra html node tag. This is normally use as server side transport to refresh the grid after the user have apply some filtering on the grid.

[Q] Can we open/change a grid with a custom "per user" column width?
[A] Yes. The grid object have a property that return the xml document use to build the grid (var xml = currentGrid.xmlDoc;). Every time a column width change, the grid update it's xml head document to match the exact user display. You can get/save this "modify user xml head template" on the server side and request it back at the grid initiation time.

[Q] Can we put specific column in the grid to read only?
[A] Yes. Just add the xml head column/field property "modification" to "0" and that field will become read only in the grid. Keyfield column are always in read only mode. By default, if you don't specify this property, the column is consider editable.

[Q] Can we put the entire grid in real only?
[A] Yes. Just add the xml head property "modification" to "0" and the entire grid will become read only.

[Q] Can the grid support MDI interface (meaning the same grid in two independent window)?
[A] Yes. A simple design patern is to append the window ID in the xml head property ID at the time of the grid initiation. This way, you will be able open multiple instance of the same grid and still be able query a specific grid. Each grid must have a unique name to work properly.

[Q] Do you support Json?
[A] The grid object take only xml format structure at initiation for faster rendering and exception handling (var oTable = BuildGrid(xmlGridObject);). You can still use Json for client-server transport by converting your Json object prior to initiate the grid.

There is many publication on the web giving xml2json and json2xml implementation. For exemple:
- Stefan Goessner (O'Reilly)
- Thomas Frank Blog's

[Q] How can I translate the filter box into another language?
[A] The default filter is a DOM element. It is locate in the Demo1.htm and Demo2.htm file. You can change the DOM node text label inside those file to support other language. A default filter template, one for each grid, will be link to every grid at initiation.

[Q] How can I translate the grid column/field header into another language?
[A] Yes. You can translate any column header via the xml head property "label". You can support multi-language of the same application by duplicating each xml head file and have custom coding at grid initiation for language selection.

[Q] How can we link custom type column/field with the filter box so the condition change dynamically just like the demo?
[A] This is done directly inside the filter box. The box contain extra DOM node with special marker for you to customize. You can add/change every type field via this method. Please refer to the Demo1.htm and Demo2.htm file for details.

[Q] Do we have to display every column/field of our database table (can we permanently hide column)?
[A] No. After the auto-generation of your xml head template, you can withdraw manually any field from the database table (except keyfield, doing so will make it impossible to link back the data to the server database). Once the field is take out of the xml head, it will never appear in the grid or inside the filter box as possible column to show/hide.

[Q] Can we apply security on the grid/filter?
[A] Yes. You will have to write custom coding to implement security on the server side. Since any request (filter/show/hide/select column) is done via a xml document, it is very easy to stripe out restricted column or cancel the entire user request.

[Q] What are the grid properties?
[A]
- currentGrid.id [String]:

Read only property, unique identifier comming from the xml head node (attribute id).
It is use to retreive the (1) Grid Marshall object inside it's collection
  - ex: arrGridMarshall[id] - and/or the (2) DOM object inside the browser
  - ex: document.getElementById(id).

- currentGrid.xmlDoc [Xml Document]:

Read only property, the xml document use to generate the Grid Marshall object. The
xml document is update on every grid change (column resize, xml body change, etc).

- currentGrid.saveOnRowChange [Boolean]:

Read only property, indicator comming from the xml head node (attribute saveoneachrowchange).
Usually set to "1" for parent table and to "0" for parent-child table (inner join).
If set to "true", i.e. "1", the Grid Marshall object will call the OnGridRowChange
event every time the user is changing row in the current table grid. You can then decide
to cancel/allow the row change request and/or save change on the server side.

- currentGrid.allowGridChange [Boolean]:

Read only property, indicator comming from the xml head node (attribute modification).
If set to "true", i.e. "1", the Grid Marshall object will allow cell edition
on any cell display in the Grid Marshall object except key(s) field(s) column.

You can also allow/disallow cell edtion on a per column base via the head
node-childs (attribute modification).

- currentGrid.nextCellDirection [String]:

Read only property, indicator comming from the xml head node (attribute movetonextcelldirection).
Move the active cell select focus to "right" or "left" after it's edition.
If you do not set this value, the grid object will keep the focus on the cell edited.

- currentGrid.gridChange [Boolean]:

Read only property, return if the user have change a value indise the current Grid Marshall object.

- currentGrid.cellSelected [DOM Node]:

Read only property, return the current cell selected in the Grid Marshall object.

[Q] What are the grid methods?
[A]
- currentGrid.getRowsChange():

Return all current row(s) change in the Grid Marshall. You can use normal keyboard control
(shift and/or control) and your mouse to select multiple row(s).

- currentGrid.getRowsChangeXml():

Return all current row(s) change in the Grid Marshall in xml format. This is a big time saver
for quick cell(s)/row(s) interrogation since you can use xPath query (yes, also in Internet Explorer).
You can use normal keyboard control (shift and/or control) and your mouse to select multiple row(s).

- currentGrid.applyRowsChange():

Set, after receiving the server save confirmation transport, the Grid Marshall back to a
new original state (including the currentGrid.gridChange back to false, etc).

- currentGrid.resetRowsChange():

Reset, after user choose to cancel his change on the database server side,
the Grid Marshall back to his original state.

- currentGrid.getRowsSelect():

Return all current row(s) select in the Grid Marshall. You can use normal keyboard control
(shift and/or control) and your mouse to select multiple row(s).

- currentGrid.getRowsSelectXml():

Return all current row(s) select in the Grid Marshall in xml format. This is a big time saver
for quick cell(s)/row(s) interrogation since you can use xPath query (yes, also in Internet Explorer).
You can use normal keyboard control (shift and/or control) and your mouse to select multiple row(s).

- currentGrid.getRowSelect():

Return the first current row select in the Grid Marshall. Normally use when the indicator
currentGrid.saveOnRowChange is set to "1".

- currentGrid.getRowSelectXml():

Return the first current row select in the Grid Marshall in xml format. Normally use when the
indicator currentGrid.saveOnRowChange is set to "1". This is a big time saver for quick
cell(s)/row(s) interrogation since you can use xPath query (yes, also in Internet Explorer).

- currentGrid.addRow():

Append a new row at the end of the current Grid Marshall. Normally call after the event AddRowInGrid
is call. You can set the new row key(s) field(s) after or prior the user have save his change
on the database server side.

- currentGrid.setRowsKeys():

Set the new row key(s) field(s) inside the Grid Marshall after the user have save his change.
Normally use inside the event SaveDataEntry.

- currentGrid.deleteRows():

Delete row(s) select inside the current Grid Marshall. Normally call after the event DeleteRowInGrid
is call and the server transport return "true".

- currentGrid.getTable():

Return the current Grid Marshall table inside browser DOM object.

- currentGrid.getTableXml():

Return the current Grid Marshall table inside browser DOM object in xml format. This is a big
time saver for quick cell(s)/row(s) interrogation since you can use xPath query
(yes, also in Internet Explorer).

- currentGrid.getTableHead():

Return the current Grid Marshall table head inside browser DOM object.

- currentGrid.getTableHeadXml():

Return the current Grid Marshall table head inside browser DOM object in xml format. This is a big
time saver for quick cell(s)/row(s) interrogation since you can use xPath query
(yes, also in Internet Explorer).

- currentGrid.getTableBody():

Return the current Grid Marshall table body inside browser DOM object.

- currentGrid.getTableBodyXml():

Return the current Grid Marshall table body inside browser DOM object in xml format. This is a big
time saver for quick cell(s)/row(s) interrogation since you can use xPath query
(yes, also in Internet Explorer).

- currentGrid.getFirstRow():

Return the current Grid Marshall first row table body inside browser DOM object.

- currentGrid.getFirstRowXml():

Return the current Grid Marshall first row table body inside browser DOM object in xml format.
This is a big time saver for quick cell(s)/row(s) interrogation since you can use xPath query
(yes, also in Internet Explorer).

- currentGrid.getLastRow():

Return the current Grid Marshall last row table body inside browser DOM object.

- currentGrid.getLastRowXml():

Return the current Grid Marshall last row table body inside browser DOM object in xml format.
This is a big time saver for quick cell(s)/row(s) interrogation since you can use xPath query
(yes, also in Internet Explorer).

- currentGrid.setFilter():

Set the current grid object filter. Normally use after the Grid Marshall initiation - ex:
var oTable = BuildGrid(xmlGrid); - for custom filtering base on the user profile for example.
A default filter template, one for each grid, will be link to every grid at initiation.
To view the default filter template, please refer to the Demo1.htm & Demo2.htm file.

- currentGrid.getFilter():

Return the current Grid Marshall filter inside browser DOM object.

- currentGrid.getFilterXml():

Return the current Grid Marshall filter inside browser DOM object in xml format.
This is a big time saver for quick cell(s)/row(s) interrogation since you can use xPath query
(yes, also in Internet Explorer).

- currentGrid.showFilter():

Display the current grid object filter in the browser. Normally use inside the event ShowFilterGrid.

- currentGrid.hideFilter():

Hide the current grid object filter in the browser.
Normally use inside the event CloseFilterGrid & ApplyFilterGrid.

- currentGrid.updateFilter():

Update the current grid object filter drop down menu inside your match case box.
Normally use inside the event UpdateFilterGrid.

- currentGrid.getFilterRequest():

Return an auto-build transport, in xml format, to build a SQL query on the server side.
Key field column(s) will always be return (and identify i.e. key="1").
Normally use inside the event RefreshGrid.

Here is a demo of the "auto-build" server transport provide by the Grid Marshall object:

<?xml version="1.0" encoding="UTF-8"?>
<Dataset id="SQLServerName.CandidatesTable" pageselect="1" rowperpage="6">
  <Matchs>
    <Match junction="" field="CandidateID" type="int" condition="greaterthan" value="10"/>
    <Match junction="and" field="LastName" type="string" condition="beginwith" value="Paul"/>
    <Match junction="or" field="Gender" type="select" condition="equal" value="M"/>
  </Matchs>
  <Sorts>
    <Sort field="LastName" type="string" order="descending"/>
    <Sort field="Account" type="float" order="ascending"/>
  </Sorts>
  <Columns>
    <Column field="CandidateID" type="int" key="1"/>
    <Column field="LastName" type="string"/>
    <Column field="FirstName" type="stringstrict"/>
    <Column field="Gender" type="select"/>
    <Column field="Account" type="float"/>
  </Columns>
</Dataset>

[Q] What are the grid events?
[A]
- SaveDataEntry:

This is where you save every cell change on any grid display in the browser
as well as any other input, select or textarea element outside the grid.
This function is call every time the user click the floppy disk icon (or save button).
This function should be call every time the "OnGridRowChange" function is call.
The grid object (currentGrid) is pass only as reference by the "OnGridRowChange" function
in case you want to tailor some special coding.

- AddRowInGrid:

This is where you add a new data row inside any grid.
This function is call every time the "add row icon" is trigger.

- DeleteRowInGrid:

This is where you delete any data row(s) inside any grid.
This function is call every time the "delete row(s) icon" is trigger.

- OnGridCellEdition:

This is where you monitor every cell being edit on any grid display in the browser.
This function is call every time the content of a grid cell is edit
(when the user type his first character inside the cell).
This function is call BEFORE the "ValidateInputAfterChange" function.

You can take advantage of this function to lock or advise the server that the
current record is being edit. You can then decide to "lock" the record for other user
until the change are commit to the database. Hence, if two or more user try to modify the
same record, the second one will receive a warning message.

- OnGridCellEditionCancel:

This is where you cancel every cell being edit on any grid display in the browser.
This function is call every time the content of a grid cell in edition is being cancel
(when the user have press the "ESC" keyboard key).

You can take advantage of this function to unlock or advise the server that the current
record edition is cancel. You can then decide to "unlock" the record for other user.

- OnGridCellChange:

This is where you monitor every cell change on any grid display in the browser.
This function is call every time the content of a grid cell change (after the user have press "ENTER").
This function is call AFTER the "ValidateInputAfterChange" function have return "true".

- OnGridRowChange:

This is where you monitor every row change on any grid display in the browser.
This function is call every time the row of a grid change (by mouse selection or arrow-up or down)
and you have set the node head property "saveoneachrowchange" of your xml to "1".
This function is call BEFORE the "OnGridRowSelect" function.

- OnGridRowSelect:

This is where you monitor every row selection on any grid display in the browser.
This function is call every time the row of a grid is select (by mouse selection or arrow-up or down).
This function is call AFTER the "OnGridRowChange" function.

- FormatCellContent:

If you have specify some special column display inside you xml head (attribute format).
This function will be call at the creation of every grid.
This function will also be call AFTER the "ValidateInputAfterChange" function.
After you have validated and accepted the user input, this will reformat your value for grid display.

- UnFormatCellContent:

If you have specify some special column display inside you xml head (attribute format).
This function will be call before any grid cell edition.
It allow the user to type an unformat entry field you have decide to apply some custom display
(like a monetary column display with the $ sign).

- ValidateInputOnKeyDown:

This is where you monitor every keyboard entry typing inside the grid cell input text element.
This function is call every time the user type a character (before the user have press "ENTER").

To see the full list of keyboard numeric value (currently set to US setting)
please refer to our toolbox's function GetKeyEnter for detail.

You can decide to skip this function (always return true) and validate all you data entry
inside the ValidateInputAfterChange function (after user have press the "ENTER").
This type of validation is demonstrate with the "date" field type in our demo.

- ValidateInputAfterChange:

This is where you monitor every cell change on any grid display in the browser.
This function is call every time the content of a grid cell change (after the user have press "ENTER").
This function is call BEFORE the "OnGridCellChange" function.

[Q] What are the filter events?
[A]
- HighlightIcon:

Highlight the filter box mouse over/out the filter close icon (top right). This event attach
itself on the "filter close icon". See the template filter (Demo1.htm/Demo2.htm file)
for more detail.

- ShowFilterGrid:

Display the filter box in the browser. This event is call every time the "filter icon"
is trigger. Fields are build automatically by the Grid using the xml data head.
Condition and value will change dynamically depending on their type.

- CloseFilterGrid:

Hide the filter box in the browser. This event is call every time the "filter close icon"
is trigger. This event will attach itself automatically on the "filter close icon".
You cannot rename this function.

- UpdateFilterGrid:

Update the match case filter box condition and value. This event is call every time
the field (column) of the drop down menu (html marker select) is change inside your match
case filter box. Condition and value will change dynamically depending on their type
(base on your xml data head). See the template filter (Demo1.htm/Demo2.htm file) for more detail.
This function will attach itself automatically on the close filter template icon.
You cannot rename this function.

- ApplyFilterGrid:

Update the grid object data with all case matching the filter box. This event is call every
time the "apply filter icon" is trigger. This is where you will send the user "custom filter"
transport to the server to be execute in SQL database query. You can also use this function
to "pre-validate" sql script injection.
This function will attach itself automatically on the apply filter template icon.
You cannot rename this function.

- RefreshGrid:

Select/sort/display per page all case matching the filter box. Send the xml filter on the
server to get back the xml body response. Since this is a demo running on local host via a
xml file, we will do xPath query to retrieve the user selected data via the SelectCaseGrid
event. In the transport reponse, you will have to return the total number of rows in
the database table (node TableLength of the xsl return in this demo) for paging.

- SelectCaseGrid:

[Demo purpose only] Replace the normal server side SQL query with XSL query. This part is normally
on the server side in PHP, ASP(.net), JSP, Java, Perl, JScript, etc.
For demo purpose we are building a xPathQuery and calling a local (with no security) xml/xsl
crossing file to apply filter and sorting option. For real case scenario, you will have to build
a SQL query on the server side.

- IsXpathString:

[Demo purpose only] Determine the field type for XSL query.

[Q] What are the hyperlink events?
[A]
- HyperLinkCall:

Call any event/function/window/etc from the column type "hyperlink" of the xml node head.
All base on the current grid row select, you can use this column type to update picture inside
grid, upload, download, start a video/audio clip, open a new window, request a report, etc.

- CloseHyperLink:

Hide the hyper link explanation box. This event is call every time the "hyperlink close icon"
is trigger.

[Q] What are the paging (page X of Y) events?
[A]
- OnGridPageXofY:

This is where you refresh/change the grid content with the page data selected by the user.
This function is call every time the user select a page X of Y or the previous/next icon.

- RefreshPageXofY:

This is where you refresh/change the page X of Y content.
This function is call every time the user select the previous/next icon
and the page currently select is on the first/last page X of Y.

[Q] Do we need to install module on the server side to run the code libraries?
[A] No, you do not require any installation module on the server. The Java Script libraries are downloaded at the browser level (client) via the http header i.e. All you have to do is to paste the Java Script libraries into one of your server http folder.

[Q] Is your products compatibles with the major browser i.e. IE 6, IE 7, Firefox, Safari and Opera, etc?
[A] Our products support fully all type of browser i.e. IE 6, IE 7, Firefox, Safari, Opera, etc. Hence, it cover 99.5% of the browser market.

[Q] Do we need to do server side scripting like PHP, ASP or JSP to run the libraries?
[A] No, the product libraries does not affect any of your server side scripting (PHP, ASP, JSP, etc). The Java Script libraries are downloaded at the browser level (client) via the http header.

[Q] Does it require any specific server configuration?
[A] The product does not require any server configuration since all the libraries are interpreted at the browser level. The server is only delivering them via the http protocol.

[Q] What is the system requirement in order to run the product?
[A] All you need is a HTTP server (IIS, Perl, Tomcat) to deliver the Java Script libraries into the client browser. It will work perfectly on Windows or Unix platform.

[Q] Do your provide update of the software?
[A] If you purchase any product, all future updates are free. To receive last version, please contact us (include your order ID and the email provide on the application form).

[Q] What do you consider a domain?
[A] A domain name is a universal and unique identifier, with a unique name, associated with an entity, that makes it possible to locate a resource or document on the Internet, and that indicates how to access it, the server name and the route within the server.

[Q] Can we redistribute your product in our application?
[A] Yes. Please refer to paragraph 3 (transfer of license), 9 (use and modifications) and 10 (permission to modify) in the term of use page. This shareware utility was made for redistribution purpose or inhouse intranet site.

[Q] What are the refund/exchange policy?
[A] We offer a 30 days money back guarantee on all the products we have for sale. Please send an email to support@developerutility.com to request a refund, including the order details you received from Developer Utility. If the software is lost within 6 months of purchase we will provide a duplicate, free of charge.

[Q] What is your security and privacy policy?
[A] For question concerning the security and privacy policy of this site, please follow this link.

[Q] I have another question?
[A] You can send all other question at this address: support@developerutility.com. You will receive an answer within 24h.





© 2007-2009 Developer Utility and/or their contributors. All rights reserved.