博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ExtJS4学习笔记(九)---ExtJS4 EditGrid(可编辑的Grid)
阅读量:4138 次
发布时间:2019-05-25

本文共 13152 字,大约阅读时间需要 43 分钟。

我们可能需要动态修改Grid中的数据,也就是要实现EditGrid功能。本文介绍如何实现Extjs4 EditGrid功能。先发几张效果图

上一篇文章,在Grid中加入了多选/全选功能(链接地址是:),实际运用中,我们可能需要动态修改Grid中的数据,也就是要实现EditGrid功能。本文介绍如何实现Extjs4 EditGrid功能。先发几张效果图。看图说话,更有说服力哦。

HTML代码:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>ExtJS4 EditGrid(可编辑的Grid)-MHZG.NET</title>
  6. <link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
  7. <link rel="stylesheet" type="text/css" href="../../examples/ux/css/CheckHeader.css" />
  8. <style type="text/css">
  9.         #search-results a {
  10.             color: #385F95;
  11.             font:bold 11px tahoma, arial, helvetica, sans-serif;
  12.             text-decoration:none;
  13.         }
  14.         .add {
  15.             background-image:url(../../examples/shared/icons/fam/cog.gif) !important;
  16.         }
  17.         #search-results a:hover {
  18.             text-decoration:underline;
  19.         }
  20.         
  21.         #search-results p {
  22.             margin:3px !important;
  23.         }
  24.         
  25.         .search-item {
  26.             font:normal 11px tahoma, arial, helvetica, sans-serif;
  27.             padding:3px 10px 3px 10px;
  28.             border:1px solid #fff;
  29.             border-bottom:1px solid #eeeeee;
  30.             white-space:normal;
  31.             color:#555;
  32.         }
  33.         .search-item h3 {
  34.             display:block;
  35.             font:inherit;
  36.             font-weight:bold;
  37.             color:#222;
  38.         }
  39.         .search-item h3 span {
  40.             float: right;
  41.             font-weight:normal;
  42.             margin:0 0 5px 5px;
  43.             width:100px;
  44.             display:block;
  45.             clear:none;
  46.         }
  47.         
  48.         .x-form-clear-trigger {
  49.             background-image: url(../../resources/themes/images/default/form/clear-trigger.gif);
  50.         }
  51.         
  52.         .x-form-search-trigger {
  53. background-image: url(../../resources/themes/images/default/form/search-trigger.gif);
  54.         }
  55.     </style>
  56. <script type="text/javascript" src="../../bootstrap.js"></script>
  57. <script type="text/javascript" src="../../locale/ext-lang-zh_CN.js"></script>
  58. <script type="text/javascript" src="editgrid.js"></script>
  59. </head>
  60. <body>
  61. <div id="demo"></div>
  62. </body>
  63. </html>
ExtJS4 EditGrid(可编辑的Grid)-MHZG.NET

editgrid.js:

  1. Ext.Loader.setConfig({enabled: true});
  2. Ext.Loader.setPath('Ext.ux', '../../examples/ux');
  3. Ext.require([
  4.     'Ext.grid.*',
  5.     'Ext.toolbar.Paging',
  6.     'Ext.util.*',
  7.     'Ext.data.*',
  8.     'Ext.state.*',
  9.     'Ext.form.*',
  10.     'Ext.ux.form.SearchField',
  11.     'Ext.selection.CellModel',
  12.     'Ext.ux.CheckColumn',
  13.     'Ext.selection.CheckboxModel'
  14. ]);
  15. Ext.onReady(function(){
  16.     var isEdit = false;
  17.     
  18.     function formatDate(value){
  19.         return value ? Ext.Date.dateFormat(value, 'Y-m-d') : '';
  20.     }
  21.     
  22.     Ext.define('MyData',{
  23.         extend: 'Ext.data.Model',
  24.         fields: [
  25.             {name:'id'},
  26.             {name:'title',type:'string'},
  27.             {name:'author'},
  28.             {name:'hits',type: 'int'},
  29.             {name:'addtime',type:'date',dataFormat:'Y-m-d'},
  30.             {name:'checked',type:'bool'}
  31.         ]
  32.     });
  33.     
  34.     //创建数据源
  35.     var store = Ext.create('Ext.data.Store', {
  36.         //分页大小
  37.         pageSize: 50,
  38.         model: 'MyData',
  39.         //是否在服务端排序
  40.         remoteSort: true,
  41.         autoDestroy: true,
  42.         proxy: {
  43.            //异步获取数据,这里的URL可以改为任何动态页面,只要返回JSON数据即可
  44.             type: 'ajax',
  45.             url: 'editgrid.asp',
  46.             
  47.             reader: {
  48.                 root: 'items',
  49.                 totalProperty  : 'total'
  50.             },
  51.             simpleSortMode: true
  52.         },
  53.         sorters: [{
  54.             //排序字段。
  55.             property: 'hits',
  56.             //排序类型,默认为 ASC
  57.             direction: 'DESC'
  58.         }]
  59.     });
  60.     //下拉框数据,测试数据。
  61.     var cbstore = Ext.create('Ext.data.Store', { 
  62.     fields: ['id', 'name'], 
  63.     data : [ 
  64.         {
    "id":"1","name":"佚名"},
  65.         {
    "id":"2","name":"管理员"},
  66.         {
    "id":"3","name":"编辑"},
  67.         {
    "id":"4","name":"总编辑"},
  68.         {
    "id":"5","name":"测试员"}
  69.     ]
  70. }); 
  71.     
  72.     //创建多选
  73.      var selModel = Ext.create('Ext.selection.CheckboxModel');
  74.      var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
  75.         clicksToEdit: 1
  76.      });
  77.     //创建Grid
  78.     var grid = Ext.create('Ext.grid.Panel',{
  79.         store: store,
  80.         selModel: selModel,
  81.         columnLines: true,
  82.         columns: [{
  83.             id:"title",
  84.             header: "标题"
  85.             width: 110, 
  86.             dataIndex: 'title'
  87.             sortable: true,
  88.             field: {
  89.                 allowBlank: false
  90.             }
  91.         },{
  92.             header: "作者",
  93.             width: 120, 
  94.             dataIndex: 'author'
  95.             id:'gc',
  96.             sortable: false,
  97.             field: {
  98.                 xtype: 'combobox',
  99.                 id:'authors',
  100.                 typeAhead: true,
  101.                 triggerAction: 'all',
  102.                 queryMode: 'local'
  103.                 selectOnTab: true,
  104.                 store: cbstore,
  105.                 lazyRender: true,
  106.                 displayField:'name',
  107.                 valueField:'id',
  108.                 listClass: 'x-combo-list-small',
  109.                 listeners:{    
  110.                     select : function(combo, record,index){
  111.                         isEdit = true;
  112.                     }
  113.                 }
  114.                  
  115.             },
  116.             renderer:rendererData
  117.         },{
  118.             header: "点击数"
  119.             width: 80, 
  120.             dataIndex: 'hits'
  121.             sortable: true,
  122.             field: {
  123.                 xtype: 'numberfield',
  124.                 allowBlank: false,
  125.                 minValue: 0,
  126.                 maxValue: 100000
  127.             }
  128.         },{
  129.             header: "添加时间"
  130.             width: 100, 
  131.             dataIndex: 'addtime'
  132.             sortable: true,
  133.             renderer: formatDate,
  134.             field: {
  135.                 xtype: 'datefield',
  136.                 format: 'y-m-d',
  137.                 minValue: '01/01/06'
  138.             }
  139.         },{
  140.             xtype: 'checkcolumn',
  141.             header:'审核',
  142.             dataIndex:'checked',
  143.             width:55
  144.         }],
  145.         height:400,
  146.         width:520,
  147.         x:20,
  148.         y:40,
  149.         title: 'ExtJS4 EditGrid(可编辑的Grid)',
  150.         
  151.         disableSelection: false,//值为TRUE,表示禁止选择
  152.         frame: true,
  153.         selType: 'cellmodel',
  154.         loadMask: true,
  155.         renderTo: 'demo',
  156.         viewConfig: {
  157.             id: 'gv',
  158.             trackOver: false,
  159.             stripeRows: false
  160.         },
  161.         dockedItems: [{
  162.             dock: 'top',
  163.             xtype: 'toolbar',
  164.             items: [{
  165.                 itemId: 'Button',
  166.                 text:'显示所选',
  167.                 tooltip:'Add a new row',
  168.                 iconCls:'add',
  169.                 handler:function(){
  170.                     var record = grid.getSelectionModel().getSelection();
  171.                     if(record.length == 0){
  172.                         Ext.MessageBox.show({
  173.                             title:"提示",
  174.                             msg:"请先选择您要操作的行!",
  175.                             icon: Ext.MessageBox.INFO,
  176.                             buttons: Ext.Msg.OK
  177.                         })
  178.                         return;
  179.                     }else{
  180.                         var ids = "";
  181.                         for(var i = 0; i < record.length; i++){
  182.                             ids += record[i].get("id")
  183.                             if(i<record.length-1){
  184.                                 ids = ids + ",";
  185.                             }
  186.                         }
  187.                         Ext.MessageBox.show({
  188.                             title:"所选ID列表",
  189.                             msg:ids
  190.                             //icon: Ext.MessageBox.INFO
  191.                         })
  192.                     }
  193.                 }
  194.             },'-',{
  195.                 width: 300,
  196.                 fieldLabel: '搜索',
  197.                 labelWidth: 50,
  198.                 xtype: 'searchfield',
  199.                 store: store
  200.             }]
  201.         }, {
  202.             dock: 'bottom',
  203.             xtype: 'pagingtoolbar',
  204.             store: store,
  205.             pageSize: 25,
  206.             displayInfo: true,
  207.             displayMsg: '显示 {0} - {1} 条,共计 {2} 条',
  208.             emptyMsg: '没有数据'
  209.         }],
  210.         plugins: [cellEditing]
  211.         
  212.     })
  213.     store.loadPage(1);
  214.     grid.on('edit', onEdit, this);
  215.     
  216.     function onEdit(){
  217.         var record = grid.getSelectionModel().getSelection()[0];
  218.         //这里进行异步操作,关于Extjs的异步操作这里不做演示,仅列出所有值。
  219.         var title   = record.get('title');
  220.         var author  = record.get('author');//注意,这里得到的是id值,而不是name值,如果没有修改作者,那么得到的值是默认显示的字符串,这个需要在服务端进行判断并处理。
  221.         var clk     = record.get('hits');
  222.         var addtime = Ext.Date.dateFormat(record.get('addtime'), 'Y-m-d');
  223.         var checked = record.get('checked');
  224.         Ext.MessageBox.show({
  225.             title:"修改的数据为",
  226.             msg:title+"\r\n"+author+"\r\n"+clk+"\r\n"+addtime+"\r\n"+checked,
  227.             icon: Ext.MessageBox.INFO,
  228.             buttons: Ext.Msg.OK
  229.         })
  230.     }
  231.     
  232.     function rendererData(value,metadata,record){
  233.         if(isEdit){
  234.             var index = cbstore.find(Ext.getCmp('authors').valueField,value);
  235.             var record = cbstore.getAt(index);
  236.             return record.data.name;
  237.         }else{
  238.             return value;
  239.         }
  240.         
  241.     }
  242. })
Ext.Loader.setConfig({enabled: true});Ext.Loader.setPath('Ext.ux', '../../examples/ux');Ext.require([    'Ext.grid.*',	'Ext.toolbar.Paging',	'Ext.util.*',    'Ext.data.*',	'Ext.state.*',    'Ext.form.*',	'Ext.ux.form.SearchField',	'Ext.selection.CellModel',	'Ext.ux.CheckColumn',	'Ext.selection.CheckboxModel']);Ext.onReady(function(){	var isEdit = false;		function formatDate(value){        return value ? Ext.Date.dateFormat(value, 'Y-m-d') : '';    }	    Ext.define('MyData',{	    extend: 'Ext.data.Model',		fields: [			{name:'id'},			{name:'title',type:'string'},			{name:'author'},		    {name:'hits',type: 'int'},			{name:'addtime',type:'date',dataFormat:'Y-m-d'},			{name:'checked',type:'bool'}		]	});		//创建数据源	var store = Ext.create('Ext.data.Store', {		//分页大小		pageSize: 50,        model: 'MyData',		//是否在服务端排序		remoteSort: true,		autoDestroy: true,        proxy: {           //异步获取数据,这里的URL可以改为任何动态页面,只要返回JSON数据即可            type: 'ajax',            url: 'editgrid.asp',                        reader: {                root: 'items',                totalProperty  : 'total'            },			simpleSortMode: true        },        sorters: [{			//排序字段。            property: 'hits',			//排序类型,默认为 ASC            direction: 'DESC'        }]    });	//下拉框数据,测试数据。	var cbstore = Ext.create('Ext.data.Store', {     fields: ['id', 'name'],     data : [         {"id":"1","name":"佚名"},		{"id":"2","name":"管理员"},		{"id":"3","name":"编辑"},		{"id":"4","name":"总编辑"},		{"id":"5","name":"测试员"}    ]}); 		//创建多选	 var selModel = Ext.create('Ext.selection.CheckboxModel');	 var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {        clicksToEdit: 1     });	//创建Grid	var grid = Ext.create('Ext.grid.Panel',{	    store: store,		selModel: selModel,		columnLines: true,		columns: [{			id:"title",			header: "标题", 			width: 110, 			dataIndex: 'title', 			sortable: true,			field: {                allowBlank: false            }		},{			header: "作者",			width: 120, 			dataIndex: 'author', 			id:'gc',			sortable: false,			field: {                xtype: 'combobox',				id:'authors',                typeAhead: true,                triggerAction: 'all',				queryMode: 'local',                 selectOnTab: true,                store: cbstore,                lazyRender: true,				displayField:'name',				valueField:'id',                listClass: 'x-combo-list-small',				listeners:{    					select : function(combo, record,index){						isEdit = true;					}				}				             },			renderer:rendererData		},{			header: "点击数", 			width: 80, 			dataIndex: 'hits', 			sortable: true,			field: {                xtype: 'numberfield',                allowBlank: false,                minValue: 0,                maxValue: 100000            }		},{			header: "添加时间", 			width: 100, 			dataIndex: 'addtime', 			sortable: true,			renderer: formatDate,			field: {                xtype: 'datefield',                format: 'y-m-d',                minValue: '01/01/06'            }		},{			xtype: 'checkcolumn',			header:'审核',			dataIndex:'checked',			width:55		}],		height:400,		width:520,		x:20,		y:40,		title: 'ExtJS4 EditGrid(可编辑的Grid)',				disableSelection: false,//值为TRUE,表示禁止选择		frame: true,		selType: 'cellmodel',        loadMask: true,        renderTo: 'demo',        viewConfig: {			id: 'gv',			trackOver: false,            stripeRows: false        },		dockedItems: [{            dock: 'top',            xtype: 'toolbar',            items: [{				itemId: 'Button',				text:'显示所选',                tooltip:'Add a new row',                iconCls:'add',				handler:function(){					var record = grid.getSelectionModel().getSelection();					if(record.length == 0){						Ext.MessageBox.show({							title:"提示",							msg:"请先选择您要操作的行!",							icon: Ext.MessageBox.INFO,               				buttons: Ext.Msg.OK						})						return;					}else{						var ids = "";						for(var i = 0; i < record.length; i++){							ids += record[i].get("id")							if(i

editgrid.asp:时间关系,只简单做了些测试数据。

  1. <%
  2.     Response.ContentType = "text/html"
  3.     Response.Charset = "UTF-8"
  4. %>
  5. <%
  6. '返回JSON数据,自定义一些测试数据。。
  7. '这里的参数与EXT3.x相同,区别在于排序字段和排序方式使用了新的属性。
  8. '由于这里是测试数据,接收的参数只用到了start,limit。sorts和dir在实际操作过程中,将之加入SQL的ORDER BY里即可。
  9. start = Request("start")
  10. limit = Request("limit")
  11. '查询时获取的参数。
  12. query = Request("query")
  13. If start = "" Then
  14.     start = 0
  15. End If
  16. If limit = "" Then
  17.     limit = 50
  18. End If
  19. sorts = Replace(Trim(Request.Form("sort")),"'",""
  20. dir = Replace(Trim(Request.Form("dir")),"'","")
  21. '测试数据,这里直接输出结果,实际应用中,应该把查询条件放到SQL语句中。
  22. If query = "newstitle" Then
  23.     Echo("{")
  24.     Echo("""total"":")
  25.     Echo("""1")
  26.     Echo(""",""items"":[")
  27.     Echo("{")
  28.     Echo("""title"":""newstitle""")
  29.     Echo(",")
  30.     Echo("""author"":""author""")
  31.     Echo(",")
  32.     Echo("""hits"":""100""")
  33.     Echo(",")
  34.     Echo("""addtime"":"""&Now()&"""")
  35.     Echo("}")
  36.     Echo("]}")
  37. Else
  38. Dim counts:counts=20
  39. '注意,这里的counts相当于Rs.RecordCount,也就是记录总数。
  40. Dim Ls:Ls = Cint(start) + Cint(limit)
  41. If Ls >= counts Then
  42.    Ls = counts
  43. End If
  44. Echo("{")
  45. Echo("""total"":")
  46. Echo(""""&counts&""",")
  47. Echo("""items"":[")
  48. For i = start+1 To Ls
  49.    Echo("{")
  50.    Echo("""id"":"""&i&"""")
  51.    Echo(",")
  52.    Echo("""title"":""newstitle"&i&"""")
  53.    Echo(",")
  54.    Echo("""author"":""author"&i&"""")
  55.    Echo(",")
  56.    Echo("""hits"":"""&i&"""")
  57.    Echo(",")
  58.    Echo("""addtime"":"""&Now()&"""")
  59.    Echo(",")
  60.    If i Mod 4 = 0 Then
  61.       Echo("""checked"":""true""")
  62.    Else
  63.       Echo("""checked"":""false""")
  64.    End If
  65.    Echo("}")
  66.    If i<Ls Then
  67.       Echo(",")
  68.    End If
  69. Next
  70. Echo("]}")
  71. End If
  72. Function Echo(str)
  73.    Response.Write(str)
  74. End Function
  75. %>
<%	Response.ContentType = "text/html"	Response.Charset = "UTF-8"%><%'返回JSON数据,自定义一些测试数据。。'这里的参数与EXT3.x相同,区别在于排序字段和排序方式使用了新的属性。'由于这里是测试数据,接收的参数只用到了start,limit。sorts和dir在实际操作过程中,将之加入SQL的ORDER BY里即可。start = Request("start")limit = Request("limit")'查询时获取的参数。query = Request("query")If start = "" Then	start = 0End IfIf limit = "" Then	limit = 50End Ifsorts = Replace(Trim(Request.Form("sort")),"'","") dir = Replace(Trim(Request.Form("dir")),"'","")'测试数据,这里直接输出结果,实际应用中,应该把查询条件放到SQL语句中。If query = "newstitle" Then    Echo("{")    Echo("""total"":")    Echo("""1")    Echo(""",""items"":[")    Echo("{")	Echo("""title"":""newstitle""")	Echo(",")	Echo("""author"":""author""")	Echo(",")	Echo("""hits"":""100""")    Echo(",")    Echo("""addtime"":"""&Now()&"""")    Echo("}")    Echo("]}")ElseDim counts:counts=20'注意,这里的counts相当于Rs.RecordCount,也就是记录总数。Dim Ls:Ls = Cint(start) + Cint(limit)If Ls >= counts Then   Ls = countsEnd IfEcho("{")Echo("""total"":")Echo(""""&counts&""",")Echo("""items"":[")For i = start+1 To Ls   Echo("{")   Echo("""id"":"""&i&"""")   Echo(",")   Echo("""title"":""newstitle"&i&"""")   Echo(",")   Echo("""author"":""author"&i&"""")   Echo(",")   Echo("""hits"":"""&i&"""")   Echo(",")   Echo("""addtime"":"""&Now()&"""")   Echo(",")   If i Mod 4 = 0 Then   	  Echo("""checked"":""true""")   Else   	  Echo("""checked"":""false""")   End If   Echo("}")   If i

由于4.x有了重大更新,所以很多在3.x中的东西在4.x里并不好使,直接导致了本文迟迟没有发表,原因就出在了更新下拉框后,Grid中显示的是ID号而不是name值。一番查看API及研究,终于发现问题所在,3.x中renderer combobox在4.x并不好用,最后重新读了一遍自己写的代码,才有所顿悟。希望文章能起到一个抛砖引玉的作用,大家一起进步。

转载地址:http://eblvi.baihongyu.com/

你可能感兴趣的文章
hdu 3787 hdoj 3787
查看>>
hdu 3790 hdoj 3790
查看>>
hdu 3789 hdoj 3789
查看>>
hdu 3788 hdoj 3788
查看>>
zju 1003 zoj 1003
查看>>
zju 1004 zoj 1004
查看>>
zju 1005 zoj 1005
查看>>
zju 1006 zoj 1006
查看>>
【虚拟机】虚拟化架构与系统部署(Windows系统安装)
查看>>
字节跳动安卓开发实习生面试分享
查看>>
好书分享之——《能力陷进》
查看>>
阅读笔记《c++ primer》
查看>>
阅读笔记《C++标准程序库》
查看>>
基于mirror driver的windows屏幕录像
查看>>
C语言8
查看>>
Qt实现简单延时
查看>>
qml有关矩形说明
查看>>
在qt中使用QSplitter设置初始比例setStretchFactor失效的解决方法
查看>>
repeater的使用
查看>>
qt msvc编译中文乱码解决
查看>>