js表格控件: Sigma Grid

//Sigma
var mygrid=new Sigma.Grid( gridOption );
Sigma.Util.onLoad( Sigma.Grid.render(mygrid) );


Sigma Grid是一个采用纯javascript开发的Ajax数据表格。特性包括:
1.基于CSS控制外观,内置Classic、Vista、Mac、XP四种风格。
2.提供单元格直接编辑功能,可以自定义编辑器,为单元格设置数学计算公式,自定义单元格表现方式。
3.提供灵活的表头控制功能比如:锁定表头,排序,拖动调整列宽。
4.支持分页,数据过滤,根据数据生成柱状图,饼状图,曲线图。
5.支持从多种数据源加载数据: JSON、XML、CSV等。
6.支持多种浏览器:IE6.0+/FireFox2.0+/Safari3.0+/Opera9.0+。
js表格控件: Sigma Grid

主页:http://www.sigmawidgets.com/products/sigma_grid2/

下载:http://www.sigmawidgets.com/download.html

示例:http://www.sigmawidgets.com/products/sigma_grid2/demos/example_master_details.html


====================================================================================================


Sigma Grid 2.4 探究 2
2011-08-22 14:55:20
标签:休闲Grid职场
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://tinyking.blog.51cto.com/3338571/646164

Sigma Grid实例探究

以“example_master_details.html”为例,该实例中应用了两个Grid,一个是父Grid,一个是子Grid,根据点击父grid中的项,子grid联动显示详细信息。

html代码

先在html中声明两个grid的装载容器

<divid="gridbox"...和 <divid="gridboxDetails"...

  1. <divid="bigbox"style="margin:15px;display:!none;">
  2. <divid="gridbox"style="border:0pxsolid#cccccc;background-color:#f3f3f3;padding:5px;height:200px;width:700px;"></div>
  3. </div>
  4. <divid="bigboxDetails"style="margin:15px;display:!none;">
  5. <divid="gridboxDetails"style="border:0pxsolid#cccccc;background-color:#f3f3f3;padding:5px;height:250px;width:700px;"></div>
  6. </div>

并对父grid进行自定义表头


  1. tableid="myHead"style="display:none">
  2. <tr>
  3. <tdrowspan="2"columnId='chk'resizable='false'>
  4. <inputid="g1_chk"type="checkbox"/></td>
  5. <tdrowspan="2"columnId='no'resizable='false'>OrderNo</td>
  6. <tdrowspan="2"columnId='employee'resizable='false'>Employee</td>
  7. <tdcolspan="7">OrderInfo</td>
  8. </tr>
  9. <tr>
  10. <tdcolumnId='country'>Country</td>
  11. <tdcolumnId='customer'>Customer<imgsrc="./images/customer.gif"/></td>
  12. <tdcolumnId='bill2005'>2005</td>
  13. <tdcolumnId='bill2006'>2006</td>
  14. <tdcolumnId='bill2007'>2007</td>
  15. <tdcolumnId='bill2008'>2008</td>
  16. <tdcolumnId='orderDate'>ShipDate</td>
  17. </tr>
  18. </table>

接下来就在javascript中对两个grid进行定义,并配置其相应的属性。

javas代码:

首先定义两个grid的id变量


  1. vargrid_demo_id="myGrid1";
  2. vargrid_details_id="myGrid2";

构建父grid的数据格式


  1. vardsOption={
  2. fields:[
  3. {name:'no'},
  4. {name:'country'},
  5. {name:'customer'},
  6. {name:'employee'},
  7. {name:'bill2005',type:'float'},
  8. {name:'bill2006',type:'float'},
  9. {name:'bill2007',type:'float'},
  10. {name:'bill2008',type:'float'},
  11. {name:'orderDate',type:'date'}
  12. ],
  13. uniqueField:0,
  14. recordType:'object'
  15. }
recordType:Record type. Could be "array" or "object".  构建子grid数据格式

  1. vardsOptionDetails={
  2. fields:[
  3. {name:'no'},
  4. {name:'product'},
  5. {name:'unitPrice',type:'float'},
  6. {name:'quantity',type:'int'},
  7. {name:'discount',type:'float'},
  8. {name:'taxFree',type:'int'},
  9. {name:'taxRate',type:'float'},
  10. {name:'shipTo',type:'int'},
  11. {name:'shipment'},
  12. {name:'note'},
  13. {name:'tax',type:'float',initValue:function(record){
  14. varavg=record[5]*record[6];
  15. returnavg.toFixed(2);
  16. }},
  17. {name:'totalPrice',type:'float',initValue:function(record){
  18. varavg=record[2]*record[3]*record[4]*record[5]*record[6];
  19. returnavg.toFixed(2);
  20. }}
  21. ],
  22. recordType:'array'
  23. }

  • 定义计算公式,并显示计算结果
  • initValue:function(record){
  • varavg=record[5]*record[6];
  • returnavg.toFixed(2);
  • }}

配置父grid属性


  1. varcolsOption=[
  2. {id:'chk',isCheckColumn:true,filterable:false,exportable:false},
  3. {id:'no',header:"OrderNo",width:60},
  4. {id:'employee',header:"Employee",width:80},
  5. {id:'country',header:"Country",width:70},
  6. {id:'customer',header:"Customer",width:80},
  7. {id:'bill2005',header:"2005",width:60,inChart:true,chartColor:'eecc99'},
  8. {id:'bill2006',header:"2006",width:60,inChart:true,chartColor:'66eeaa'},
  9. {id:'bill2007',header:"2007",width:60,inChart:true,chartColor:'d65555'},
  10. {id:'bill2008',header:"2008",width:60,inChart:true,chartColor:'eeaa33'},
  11. {id:'orderDate',header:"DeliveryDate",width:100}
  12. ];
isCheckColumn: 是否为选择列  
filterable: 是否可过滤 exportable:是否可导出 inChart:在chart中显示 chartColor: 在chart中显示的颜色

配置子grid属性


  1. varcolsOptionDetails=[
  2. {id:'no',header:"ItemNo",width:60,editor:{type:"text"},
  3. frozen:true},
  4. {id:'product',header:"Product",width:100,
  5. grouped:true,frozen:true,sortOrder:'asc',
  6. editor:{type:"select",
  7. options:{"Abalone":"Abalone","Amber":"Amber","Amethyst":"Amethyst","Aquamarine":"Aquamarine",
  8. "Cameos":"Cameos","Citrine":"Citrine","Coral":"Coral","Crystal":"Crystal","CubicZirconia":"CubicZirconia",
  9. "Emerald":"Emerald","Enamel":"Enamel","Garnet":"Garnet","Glass":"Glass","Moissanite":"Moissanite",
  10. "Onyx":"Onyx","Opal":"Opal","Pearl":"Pearl"},defaultText:''}},
  11. {id:'unitPrice',header:"UnitPrice",width:60,
  12. editor:{type:"text",validRule:['R','F']}},
  13. {id:'quantity',header:"Quantity",width:80,
  14. editor:{type:"text",validRule:['R']}},
  15. {id:'discount',header:"Discount",width:100,renderer:example_renderDiscount,
  16. editor:{type:"text",validRule:['R','F']}},
  17. {id:'taxFree',header:"TaxFree",width:60,renderer:example_renderTaxFree},
  18. {id:'taxRate',header:"TaxRate",width:60,
  19. editor:{type:"text",validRule:['R','F']}},
  20. {id:'tax',header:"Tax",width:60},
  21. {id:'totalPrice',header:"TotalPrice",width:60,align:"right"
  22. },
  23. {id:'shipTo',header:"ShipTo",width:100},
  24. {id:'shipment',header:"Shipment",width:100},
  25. {id:'note',header:"Note",width:150}
  26. ];

editor:可以编辑此列 {type:类型
options:为下拉列表提供数据
defaultText:默认值
validRule:验证'R' - Required
'N' - Number
'E' - Email
'F' - Float}
frozen:是否锁定此列 如果被锁定 在拖动滚动条时候此列不会发生变化
sortOrder:排序 asc 或 desc
renderer:渲染效果 参数为function(value ,record,colObj,grid,colNo,rowNo)
align:位置

创建Grid对象并输出


  1. varmygrid=newSigma.Grid(gridOption);
  2. varmygridDetails=newSigma.Grid(gridOptionDetails);
  3. Sigma.Util.onLoad(Sigma.Grid.render(mygrid));
  4. Sigma.Util.onLoad(Sigma.Grid.render(mygridDetails));

本文出自 “TinyKing” 博客,请务必保留此出处http://tinyking.blog.51cto.com/3338571/646164



=====================================================================================================

Sigma Grid 表格的研究及使用

Sigma Grid纯javascript,Sigma grid 用Ajax做grid展现并可实现数据的编辑,支持滚动表格及排序。它是非常强大的并且简单易用并且能整合php,asp.net,jsp,RoR

研究版本:Sigma Grid 2.2

Grid目录结构:
grid
|--->calendar
| |--calendar.js
| |--calendar-blue.css
| |--calendar-cn.js
| |--calendar-cn-utf8.js
| |--calendar-en.js
| |--calendar-setup.js
| |--simple-1.html
|--> flashchart
| |---->fusioncharts
| | |--->charts
| | | |--FCF_Area2D.swf
| | | |--略……(.swf)
| | |--ChangeDataXML.html
| | |--Chart.html
| | |--ChartChange.html
| | |--FusionCharts.js
|--->skin
| |---->china
| | |--->images
| | | |--cell_index_bg.gif
| | | |--略……(.gif)
| | |--skinstyle.css
| |---->default
| | |--->images
| | | |--button_bg.gif
| | | |-- 略……(.gif)
| | |--skinstyle.css
| |---->mac
| | |--->images
| | | |--button_bg.gif
| | | |-- 略……(.gif)
| | |--skinstyle.css
| |---->vista
| | |--->images
| | | |--cell_index_bg.gif
| | | |-- 略……(.gif)
| | |--skinstyle.css
|--gt_grid_all.js
|--gt_grid_height.css
|--gt_grid.css

|--gt_msg_en.js


这里以master/details和Sigma Grid CRUD为例,说明Sigma Grid的使用方法,各个参数的作用,数据的传输,及数据的保存

master/details的demo演示页面为example_master_details.html
此demo演示了父子关系的grid。子grid为明细信息,通过鼠标点击父grid的某条记录关联出子grid内容。
下面着重介绍此grid的使用方法:
首先在页面中定义两个grid的位置

Html代码js表格控件: Sigma Grid
  1. <divid="bigbox"style="margin:15px;display:!none;">
  2. <divid="gridbox"style="border:0pxsolid#cccccc;background-color:#f3f3f3;padding:5px;height:200px;width:700px;"></div>
  3. </div>
  4. <divid="bigboxDetails"style="margin:15px;display:!none;">
  5. <divid="gridboxDetails"style="border:0pxsolid#cccccc;background-color:#f3f3f3;padding:5px;height:250px;width:700px;"></div>
  6. </div>



自定义grid列头

Html代码js表格控件: Sigma Grid
  1. <tableid="myHead"style="display:none">
  2. <tr>
  3. <tdrowspan="2"columnId='chk'resizable='false'>
  4. <inputid="g1_chk"type="checkbox"/></td>
  5. <tdrowspan="2"columnId='no'resizable='false'>OrderNo</td>
  6. <tdrowspan="2"columnId='employee'resizable='false'>Employee</td>
  7. <tdcolspan="7">OrderInfo</td>
  8. </tr>
  9. <tr>
  10. <tdcolumnId='country'>Country</td>
  11. <tdcolumnId='customer'>Customer<imgsrc="./images/customer.gif"/></td>
  12. <tdcolumnId='bill2005'>2005</td>
  13. <tdcolumnId='bill2006'>2006</td>
  14. <tdcolumnId='bill2007'>2007</td>
  15. <tdcolumnId='bill2008'>2008</td>
  16. <tdcolumnId='orderDate'>ShipDate</td>
  17. </tr>
  18. </table>


//定义两个grid

Js代码js表格控件: Sigma Grid
  1. vargrid_demo_id="myGrid1";
  2. vargrid_details_id="myGrid2";


构建父grid数据结构

Js代码js表格控件: Sigma Grid
  1. vardsOption={
  2. fields:[
  3. {name:'no'},
  4. {name:'country'},
  5. {name:'customer'},
  6. {name:'employee'},
  7. {name:'bill2005',type:'float'},
  8. {name:'bill2006',type:'float'},
  9. {name:'bill2007',type:'float'},
  10. {name:'bill2008',type:'float'},
  11. {name:'orderDate',type:'date'}
  12. ],
  13. uniqueField:0,//Itcouldbeuniquefieldnameoruniquefieldindexinfields
  14. recordType:'object'//记录类型只能是:'object'or'array'
  15. }



构建子grid数据结构

Js代码js表格控件: Sigma Grid
  1. vardsOptionDetails={
  2. fields:[
  3. {name:'no'},
  4. {name:'product'},
  5. {name:'unitPrice',type:'float'},
  6. {name:'quantity',type:'int'},
  7. {name:'discount',type:'float'},
  8. {name:'taxFree',type:'int'},
  9. {name:'taxRate',type:'float'},
  10. {name:'shipTo',type:'int'},
  11. {name:'shipment'},
  12. {name:'note'},
  13. {name:'tax',type:'float',initValue:function(record){
  14. varavg=record[5]*record[6];
  15. returnavg.toFixed(2);
  16. }},
  17. {name:'totalPrice',type:'float',initValue:function(record){
  18. varavg=record[2]*record[3]*record[4]*record[5]*record[6];
  19. returnavg.toFixed(2);
  20. }}
  21. ],
  22. recordType:'array'
  23. }
  24. //渲染成checked.gif
  25. functionexample_renderTaxFree(value,record,columnObj,grid,colNo,rowNo){
  26. if(value==0)return"<imgsrc='./images/unchecked.gif'>";
  27. return"<imgsrc='./images/checked.gif'>";
  28. }



//渲染成星星 five_star

Js代码js表格控件: Sigma Grid
  1. functionexample_renderDiscount(value,record,columnObj,grid,colNo,rowNo){
  2. vari=Math.round(value/0.4*5);
  3. if(i>5)i=5;if(i<1)i=1;
  4. return"<IMGSRC=\"./images/five_star"+i+".gif\"/>"
  5. }



构建父grid 列样式
/*
isCheckColumn:选项列
filterable:是否可以过滤此列
exportable:输出表格
id:id
header:显示的名称
width:宽度
inChart:是否在图表中统计
chartColor:图表颜色
*/

Js代码js表格控件: Sigma Grid
  1. varcolsOption=[
  2. {id:'chk',isCheckColumn:true,filterable:false,exportable:false},
  3. {id:'no',header:"OrderNo",width:60},
  4. {id:'employee',header:"Employee",width:80},
  5. {id:'country',header:"Country",width:70},
  6. {id:'customer',header:"Customer",width:80},
  7. {id:'bill2005',header:"2005",width:60,inChart:true,chartColor:'eecc99'},
  8. {id:'bill2006',header:"2006",width:60,inChart:true,chartColor:'66eeaa'},
  9. {id:'bill2007',header:"2007",width:60,inChart:true,chartColor:'d65555'},
  10. {id:'bill2008',header:"2008",width:60,inChart:true,chartColor:'eeaa33'},
  11. {id:'orderDate',header:"DeliveryDate",width:100}
  12. ];


构建子grid 列样式
/*

editor:可以编辑此列 {type:类型
options:为下拉列表提供数据
defaultText:默认值
validRule:验证'R' - Required
'N' - Number
'E' - Email
'F' - Float}
frozen:是否锁定此列 如果被锁定 在拖动滚动条时候此列不会发生变化
sortOrder:排序 asc 或 desc
renderer:渲染效果 参数为function(value ,record,colObj,grid,colNo,rowNo)
align:位置

*/

Js代码js表格控件: Sigma Grid
  1. varcolsOptionDetails=[
  2. {id:'no',header:"ItemNo",width:60,editor:{type:"text"},
  3. frozen:true},
  4. {id:'product',header:"Product",width:100,
  5. grouped:true,frozen:true,sortOrder:'asc',
  6. editor:{type:"select",
  7. options:{"Abalone":"Abalone","Amber":"Amber","Amethyst":"Amethyst","Aquamarine":"Aquamarine",
  8. "Cameos":"Cameos","Citrine":"Citrine","Coral":"Coral","Crystal":"Crystal","CubicZirconia":"CubicZirconia",
  9. "Emerald":"Emerald","Enamel":"Enamel","Garnet":"Garnet","Glass":"Glass","Moissanite":"Moissanite",
  10. "Onyx":"Onyx","Opal":"Opal","Pearl":"Pearl"},defaultText:''}},
  11. {id:'unitPrice',header:"UnitPrice",width:60,
  12. editor:{type:"text",validRule:['R','F']}},
  13. {id:'quantity',header:"Quantity",width:80,
  14. editor:{type:"text",validRule:['R']}},
  15. {id:'discount',header:"Discount",width:100,renderer:example_renderDiscount,
  16. editor:{type:"text",validRule:['R','F']}},
  17. {id:'taxFree',header:"TaxFree",width:60,renderer:example_renderTaxFree},
  18. {id:'taxRate',header:"TaxRate",width:60,
  19. editor:{type:"text",validRule:['R','F']}},
  20. {id:'tax',header:"Tax",width:60},
  21. {id:'totalPrice',header:"TotalPrice",width:60,align:"right"
  22. },
  23. {id:'shipTo',header:"ShipTo",width:100},
  24. {id:'shipment',header:"Shipment",width:100},
  25. {id:'note',header:"Note",width:150}
  26. ];



父grid属性
/*
width:宽度
height:高度
container:grid创建的位置
dataset:数据
columns:列样式
pageSizeList:页面显示条数
customHead:自定义grid头
onClickCell:点击触发事件
SigmaGridPath:未知
loadURL:获取数据地址
exportURL:输出地址 用于输出EXCEL XML CSV PDF
exportFileName:输出名称
remotePaging:指定服务器端不分页工作
defaultRecord:当点击添加按钮时默认的加入一行的数据
pageSize:页面显示记录数
toolbarContent:grid 工具条{
nav goto - 分页
pagesize - 显示记录数
reload - 刷新
print - 打印
csv - 输出CSV格式文件
xls - 输出xls格式文件
pdf - 输出pdf格式文件
filter - 过滤查询
chart - 图表
state - 状态
}
*/

Js代码js表格控件: Sigma Grid
  1. vargridOption={
  2. id:grid_demo_id,
  3. width:"700",
  4. height:"350",
  5. container:'gridbox',
  6. replaceContainer:true,
  7. dataset:dsOption,
  8. columns:colsOption,
  9. pageSizeList:[5,10,15,20],
  10. customHead:'myHead',
  11. onClickCell:function(value,record,cell,row,colNO,rowNO,columnObj,grid){
  12. varno=record["no"]>"070-19"?"070-19":record["no"];
  13. vargrid=Sigma.$grid(grid_details_id);
  14. grid.loadURL="./data/"+no+".js";
  15. grid.reload();
  16. },
  17. SigmaGridPath:'../grid/',
  18. loadURL:'test.jsp?actionMethod=list',
  19. saveURL:'test.jsp?actionMethod=save',
  20. exportURL:'./export_php/testMasterList.php?export=true',
  21. exportFileName:'SalesMasterReport',
  22. remotePaging:false,
  23. defaultRecord:["","","","",0,0,0,0,"2008-01-01"],
  24. pageSize:20,
  25. toolbarContent:'navgoto|pagesize|reload|printcsvxlsxmlpdffilterchart|state'
  26. };



子grid属性
/*
editable:表格是否可编辑
groupable:true分组菜单将会出现在主菜单中,并且启动分组功能
clickStartEdit:点击鼠标出发编辑事件
showGridMenu:是否显示主菜单
allowCustomSkin:是否制定skin出现在菜单上
allowFreeze:是否被冻结栏出现在主菜单
allowHide:隐藏是否出现在主菜单
allowGroup:组是否出现在主菜单

*/

Js代码js表格控件: Sigma Grid
  1. vargridOptionDetails={
  2. id:grid_details_id,
  3. loadUrl:'./data/010-0.js',
  4. saveURL:'test.jsp?actionMethod=save',
  5. width:"700",
  6. height:"260",
  7. container:'gridboxDetails',
  8. replaceContainer:true,
  9. editable:true,
  10. groupable:true,
  11. pageSizeList:[5,10,15,20],
  12. dataset:dsOptionDetails,
  13. columns:colsOptionDetails,
  14. clickStartEdit:true,
  15. defaultRecord:["","",0,0,0.0,0,0.0,"Customer","UPS",""],
  16. pageSize:30,
  17. toolbarContent:'reload|adddelsave|print|state',
  18. showGridMenu:true,
  19. allowCustomSkin:true,
  20. allowFreeze:true,
  21. allowHide:true,
  22. allowGroup:true,
  23. customRowAttribute:function(record,rn,grid){
  24. if(record[11]>80){
  25. return'';
  26. }
  27. }
  28. };


创建Grid对象并输出

Js代码js表格控件: Sigma Grid
  1. varmygrid=newSigma.Grid(gridOption);
  2. varmygridDetails=newSigma.Grid(gridOptionDetails);
  3. Sigma.Util.onLoad(Sigma.Grid.render(mygrid));
  4. Sigma.Util.onLoad(Sigma.Grid.render(mygridDetails));



Sigma Grid CRUD的demo演示页面为list1.jsp
此例子用来说明 前后台的数据交互 及grid的增删改查及保存功能

获取数据属性:
loadURL
保存数据属性:
saveURL

例:
loadURL : APP_PATH+'/views/controller.jsp?actionMethod=list'
saveURL : APP_PATH+'/views/controller.jsp?actionMethod=save'

这里为了实现功能效果只简单的使用jsp直接访问数据库实现查询CRUD的工作。
当然也使用MVC结构来实现,只要返回的数据类型是JOSN并且符合Sigma Grid的数据格式即可
controller.jsp

Java代码js表格控件: Sigma Grid
  1. <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
  2. <%@pageimport="java.sql.*,java.util.*"%>
  3. <%@pageimport="com.fins.gt.server.*"%>
  4. <%!
  5. ConnectiongetConnection(){
  6. Stringurl="jdbc:mysql://localhost:3306/sigma_grid_server";
  7. Connectionconn=null;
  8. try{
  9. Class.forName("com.mysql.jdbc.Driver").newInstance();
  10. conn=DriverManager.getConnection(url,"root","");
  11. }catch(Exceptione){
  12. }
  13. returnconn;
  14. }
  15. voidcloseConnection(Connectionconn){
  16. try{
  17. conn.close();
  18. }catch(Exceptione){
  19. }
  20. }
  21. ListlistOrders(){
  22. Connectionconn=getConnection();
  23. if(conn==null)
  24. returnnewArrayList();
  25. Statementstmt=null;
  26. ResultSetrs=null;
  27. Listlist=newArrayList();
  28. try{
  29. stmt=conn.createStatement();
  30. rs=stmt.executeQuery("select*fromorders");
  31. while(rs.next()){
  32. Mapmap=newHashMap();
  33. map.put("order_no",newLong(rs.getLong("order_no")));
  34. map.put("employee",rs.getString("employee"));
  35. map.put("country",rs.getString("country"));
  36. map.put("customer",rs.getString("customer"));
  37. map.put("order2005",newFloat(rs.getFloat("order2005")));
  38. map.put("order2006",newFloat(rs.getFloat("order2006")));
  39. map.put("order2007",newFloat(rs.getFloat("order2007")));
  40. map.put("order2008",newFloat(rs.getFloat("order2008")));
  41. map.put("delivery_date",rs.getString("delivery_date"));
  42. list.add(map);
  43. }
  44. rs.close();
  45. stmt.close();
  46. }catch(Exceptione){
  47. }
  48. closeConnection(conn);
  49. returnlist;
  50. }
  51. int[]insertOrders(ListupdatedList){
  52. int[]opresults=null;
  53. Stringsql="INSERTINTOorders(employee,country,customer,order2005,order2006,order2007,order2008,delivery_date)VALUES(?,?,?,?,?,?,?,?)";
  54. Connectionconn=null;
  55. PreparedStatementpstmt=null;
  56. try{
  57. conn=getConnection();
  58. pstmt=conn.prepareStatement(sql);
  59. for(inti=;i<updatedList.size();i++){
  60. Maprecord=(Map)updatedList.get(i);
  61. pstmt.setString(1,String.valueOf(record.get("employee")));
  62. pstmt.setString(2,String.valueOf(record.get("country")));
  63. pstmt.setString(3,String.valueOf(record.get("customer")));
  64. pstmt.setString(4,String.valueOf(record.get("order2005")));
  65. pstmt.setString(5,String.valueOf(record.get("order2006")));
  66. pstmt.setString(6,String.valueOf(record.get("order2007")));
  67. pstmt.setString(7,String.valueOf(record.get("order2008")));
  68. pstmt.setString(8,String.valueOf(record.get("delivery_date")));
  69. pstmt.addBatch();
  70. }
  71. opresults=pstmt.executeBatch();
  72. }catch(SQLExceptione){
  73. opresults=null;
  74. }finally{
  75. closeConnection(conn);
  76. }
  77. returnopresults;
  78. }
  79. int[]updateOrders(ListupdatedList){
  80. int[]opresults=null;
  81. Stringsql="UPDATEordersSETcustomer=?,order2008=?,delivery_date=?WHEREorder_no=?";
  82. Connectionconn=null;
  83. PreparedStatementpstmt=null;
  84. try{
  85. conn=getConnection();
  86. pstmt=conn.prepareStatement(sql);
  87. for(inti=;i<updatedList.size();i++){
  88. Maprecord=(Map)updatedList.get(i);
  89. pstmt.setString(1,String.valueOf(record.get("customer")));
  90. pstmt.setString(2,String.valueOf(record.get("order2008")));
  91. pstmt.setString(3,String.valueOf(record.get("delivery_date")));
  92. pstmt.setString(4,String.valueOf(record.get("order_no")));
  93. pstmt.addBatch();
  94. }
  95. opresults=pstmt.executeBatch();
  96. }catch(SQLExceptione){
  97. opresults=null;
  98. }finally{
  99. closeConnection(conn);
  100. }
  101. returnopresults;
  102. }
  103. int[]deleteOrders(ListupdatedList){
  104. int[]opresults=null;
  105. Stringsql="DELETEFROMordersWHEREorder_no=?";
  106. Connectionconn=null;
  107. PreparedStatementpstmt=null;
  108. try{
  109. conn=getConnection();
  110. pstmt=conn.prepareStatement(sql);
  111. for(inti=;i<updatedList.size();i++){
  112. Maprecord=(Map)updatedList.get(i);
  113. pstmt.setString(1,String.valueOf(record.get("order_no")));
  114. pstmt.addBatch();
  115. }
  116. opresults=pstmt.executeBatch();
  117. }catch(SQLExceptione){
  118. opresults=null;
  119. }finally{
  120. closeConnection(conn);
  121. }
  122. returnopresults;
  123. }
  124. booleansaveOrders(ListinsertedRecords,ListupdatedList,ListdeletedRecords){
  125. //youcancontroltransaction,commit,rollbackhere
  126. int[]insertCodes=insertOrders(insertedRecords);
  127. int[]updateCodes=updateOrders(updatedList);
  128. int[]deleteCodes=deleteOrders(deletedRecords);
  129. booleansuccess=insertCodes!=null&&updateCodes!=null&&deleteCodes!=null;
  130. returnsuccess;
  131. }
  132. %>
  133. <%
  134. //GridServerHandlerisserversidewrapper,youcangetalltheinfopostedtoserverinyourJavawayinsteadofJavaScript
  135. GridServerHandlergridServerHandler=newGridServerHandler(request,response);
  136. Stringoperation=request.getParameter("actionMethod");
  137. if("save".equals(operation)){
  138. System.out.println("----save-----");
  139. booleansuccess=true;
  140. //取得新增的数据集合,每条数据记录在map里
  141. ListinsertedRecords=gridServerHandler.getInsertedRecords();
  142. //取得修改的数据集合,每条数据记录在map里
  143. ListupdatedList=gridServerHandler.getUpdatedRecords();
  144. //取得删除的数据集合,每条数据记录在map里
  145. ListdeletedRecords=gridServerHandler.getDeletedRecords();
  146. //如果希望取得bean的集合那么请使用有参方法:xxx.getXXXXXXRecords(ClassbeanClass);
  147. //例如:ListupdateList=gridServerHandler.getUpdatedRecords(StudentVO.class);
  148. //调用"相应的方法"来updatedeleteinsert数据
  149. success=saveOrders(insertedRecords,updatedList,deletedRecords);
  150. //设置该次操作是否成功.
  151. gridServerHandler.setSuccess(success);
  152. //如果操作不成功你也可以自定义一些异常信息发送给客户端.
  153. //gridServerHandler.setSuccess(false);
  154. //gridServerHandler.setException("...exceptioninfo...");
  155. //向客户端输出json字符串.
  156. out.print(gridServerHandler.getSaveResponseText());
  157. }else{//clientisretrievingdata
  158. Listlist=listOrders();
  159. System.out.println("----list-----");
  160. inttotalRowNum=list.size();
  161. //取得总记录数
  162. gridServerHandler.setTotalRowNum(totalRowNum);
  163. //调用"相应的方法"来取得数据.下面4个方法通常对于进行分页查询很有帮助,根据需要使用即可.
  164. //gridServerHandler.getStartRowNum()当前页起始行号
  165. //gridServerHandler.getEndRowNum()当前页结束行号
  166. //gridServerHandler.getPageSize()每页大小
  167. //gridServerHandler.getTotalRowNum()记录总条数
  168. //本例中list里的元素是map,
  169. //如果元素是bean,请使用gridServerHelp.setData(list,BeanClass.class);
  170. gridServerHandler.setData(list);
  171. //gridServerHandler.setException("yourexceptionmessage");
  172. //向客户端输出json字符串.
  173. out.print(gridServerHandler.getLoadResponseText());
  174. System.out.print(gridServerHandler.getLoadResponseText());
  175. //你也可以使用gridServerHandler.getLoadResponseText()来取得字符串.
  176. //然后自行向客户端输出,这样做的好处是你可以自己来决定response的contentType和编码.
  177. }
  178. %>



通过上面的代码可以看出 操作grid的对象是GridServerHandler
使用GridServerHandler对象,来操作grid中的数据。

上传了demo,部署后访问demo地址为:
http://localhost:8080/GtGridDemo/views/demo1.jsp
.................................................................demo2.html
.................................................................demo3.jsp
.................................................................demo4.html
.................................................................demo5.html
通过以上demo实现以下功能
简单载入一个结果集(select top 20 * from Orders),主要展示以下特点(如何load数据,如何锁定表头列头,跨列表头如何设定,如何设定客户端按列排序)
带2个条件查询Orders表(如何传入查询条件查询),
主从表的载入(orders, Order Details)
可以的编辑单表Grid(单元格的编辑框如何定义,如何add和delete一行,编辑后的数据如何提交给jsp)
可以的编辑主从表Grid(重点体现子表如何编辑,并保持主记录和子记录的关系,编辑后的数据如何提交给jsp)
打印功能的实现(pdf,excel,)