ExtJS4学习笔记(九)---ExtJS4 EditGrid(可编辑的Grid)

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

上一篇文章,在Grid中加入了多选/全选功能(链接地址是:http://www.mhzg.net/a/20115/20115311100255.html),实际运用中,我们可能需要动态修改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>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ExtJS4 EditGrid(可编辑的Grid)-MHZG.NET</title>
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
<link rel="stylesheet" type="text/css" href="../../examples/ux/css/CheckHeader.css" />
<style type="text/css">
        #search-results a {
            color: #385F95;
            font:bold 11px tahoma, arial, helvetica, sans-serif;
            text-decoration:none;
        }
        .add {
            background-image:url(../../examples/shared/icons/fam/cog.gif) !important;
        }
        #search-results a:hover {
            text-decoration:underline;
        }
        
        #search-results p {
            margin:3px !important;
        }
        
        .search-item {
            font:normal 11px tahoma, arial, helvetica, sans-serif;
            padding:3px 10px 3px 10px;
            border:1px solid #fff;
            border-bottom:1px solid #eeeeee;
            white-space:normal;
            color:#555;
        }
        .search-item h3 {
            display:block;
            font:inherit;
            font-weight:bold;
            color:#222;
        }

        .search-item h3 span {
            float: right;
            font-weight:normal;
            margin:0 0 5px 5px;
            width:100px;
            display:block;
            clear:none;
        }
        
        .x-form-clear-trigger {
            background-image: url(../../resources/themes/images/default/form/clear-trigger.gif);
        }
        
        .x-form-search-trigger {
            background-image: url(../../resources/themes/images/default/form/search-trigger.gif);
        }
    </style>
<script type="text/javascript" src="../../bootstrap.js"></script>
<script type="text/javascript" src="../../locale/ext-lang-zh_CN.js"></script>
<script type="text/javascript" src="editgrid.js"></script>
</head>

<body>
<div id="demo"></div>
</body>
</html>

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<record.length-1){
								ids = ids + ",";
							}
						}
						Ext.MessageBox.show({
							title:"所选ID列表",
							msg:ids
							//icon: Ext.MessageBox.INFO
						})
					}
				}
			},'-',{
                width: 300,
                fieldLabel: '搜索',
                labelWidth: 50,
                xtype: 'searchfield',
                store: store
            }]
        }, {
            dock: 'bottom',
            xtype: 'pagingtoolbar',
            store: store,
            pageSize: 25,
            displayInfo: true,
            displayMsg: '显示 {0} - {1} 条,共计 {2} 条',
            emptyMsg: '没有数据'
        }],
		plugins: [cellEditing]
        
	})
	store.loadPage(1);
	grid.on('edit', onEdit, this);
	
	function onEdit(){
		var record = grid.getSelectionModel().getSelection()[0];
		//这里进行异步操作,关于Extjs的异步操作这里不做演示,仅列出所有值。
		var title   = record.get('title');
		var author  = record.get('author');//注意,这里得到的是id值,而不是name值,如果没有修改作者,那么得到的值是默认显示的字符串,这个需要在服务端进行判断并处理。
		var clk     = record.get('hits');
		var addtime = Ext.Date.dateFormat(record.get('addtime'), 'Y-m-d');
		var checked = record.get('checked');
		Ext.MessageBox.show({
			title:"修改的数据为",
			msg:title+"\r\n"+author+"\r\n"+clk+"\r\n"+addtime+"\r\n"+checked,
			icon: Ext.MessageBox.INFO,
			buttons: Ext.Msg.OK
		})
	}
	
	function rendererData(value,metadata,record){
		if(isEdit){
			var index = cbstore.find(Ext.getCmp('authors').valueField,value);
			var record = cbstore.getAt(index);
			return record.data.name;
		}else{
			return value;
		}
		
	}
})

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 = 0
End If
If limit = "" Then
	limit = 50
End If
sorts = 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("]}")
Else
Dim counts:counts=20
'注意,这里的counts相当于Rs.RecordCount,也就是记录总数。

Dim Ls:Ls = Cint(start) + Cint(limit)
If Ls >= counts Then
   Ls = counts
End If

Echo("{")
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<Ls Then
      Echo(",")
   End If
Next

Echo("]}")
End If
Function Echo(str)
   Response.Write(str)
End Function
%>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值