ext可编辑grid保存,删除修改

 
最近才开始学ext,做了个小模块,留作以后类似的备用

要求

 

 

【新增】【删除】【保存】

选择

 序号

 薪资项目

 字段名

1

职务工资

XZ1

2

级别工资

XZ2

3

技术等级工资

XZ3

控制

序号自动生成,不可修改,满足唯一即可,保存前必须验证薪资项目和字段名都填了数据。

【新增】列表增加一行。

【删除】删除选中的薪资项,删除前提示“是否确定删除薪资项?”,删除完成后提示删除成功。

【保存】每一项都必填,否则不允许保存,保存当前页面的数据到数据库中。

最后结果效果图

代码

{

<%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

 

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

 

<html>

  <head>

    <basehref="<%=basePath%>">

   

    <title>My JSP 'xzwh.jsp' starting page</title>

   

    <metahttp-equiv="pragma"content="no-cache">

    <metahttp-equiv="cache-control"content="no-cache">

    <metahttp-equiv="expires"content="0">   

    <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

    <metahttp-equiv="description"content="This is my page">

  <%@include file="/frame/common/ext-js3.jsp"%>

  <styletype="text/css">

  .add {

            background-image:url(<%=basePath%>/resources/images/add.png) !important;

       }

   .remove {

            background-image:url(<%=basePath%>/resources/images/delete.gif) !important;

        }

    .save {

            background-image:url(<%=basePath%>/resources/images/save.gif) !important;

        }

  </style>

  <scripttype="text/javascript"src="<%=basePath%>ext/extjs3/ux/CheckColumn.js"></script>

   <scripttype="text/javascript">

   varstop=0;

   varedit;

   Ext.onReady(function(){

    varfm = Ext.form;

var sm = newExt.grid.CheckboxSelectionModel({ //创建checkbox

//同时给前面每条数据的checkbox添加一个监听,只有选中一个以上的,删除按钮才会相应

        listeners: {

            selectionchange:function(sm) {

                if (sm.getCount()) {

                     grid.removeButton.enable();

                } else {

                  grid.removeButton.disable();

                }

            }

        }

    });

 

//创建解析数据源的reader格式,是arrayReader(和表头对于的namedataIndex,和数据类型)

  varreader = newExt.data.ArrayReader({}, [

       {name: 'xuanze',type:'bool'},

       {name: 'xuhao',type:'float'},

       {name: 'xinzixiangmu', type: 'string'},

       {name: 'ziduanming', type: 'string'}

    ]);

//创建grid列字段的表头,以及对应的dataIndex和排序,还有该列是否可编辑,是否为空,长度等,顺便把checkbox列加进来

    varcm = newExt.grid.ColumnModel({

        // specify any defaults for each column

        defaults: {

            sortable:true // columns are not sortable by default          

        },

        columns: [

         sm,

         {header:"序号", width: 100, sortable:true, dataIndex:'xuhao',align:'center'},

         {header:"薪资项目", width: 250, sortable:true, dataIndex:'xinzixiangmu',align:'center',editor:new fm.TextField({allowBlank:false,maxLength:20})},

         {header:"字段名", width: 200, sortable:true, dataIndex:'ziduanming',align:'center',editor:new fm.TextField({allowBlank:false,maxLength:20})}

        ]

    });

 

    // create the Data Store 创建数据源,并把前面创建的reader加进来

    var store = newExt.data.Store({

        reader:reader

    });

   

 

 

    // create the editor grid创建最后的grid,把数据源,列,checkbox,加进来

    var grid = newExt.grid.EditorGridPanel({

        store: store,

        cm: cm,

        sm:sm,

        renderTo:'editor-grid',

        width: 600,

        height: 780,

        title:'薪资项对应关系维护',

        frame:true,

        iconCls:'icon-grid',

        clicksToEdit: 1,

        tbar: [{

            text:'新增',

            iconCls:'add',

            handler :function(){

                // access the Record constructor through the grid's store

               var Plant = grid.getStore().recordType;

                var storeObj=grid.getStore();

                var p;

                if(grid.getStore().getCount()!=0){

                 function getMaxXuhao(){

                var firstXuhao=parseInt(storeObj.getAt(0).get('xuhao'));

                var lastXuhao=parseInt(storeObj.getAt(storeObj.getCount()-1).get('xuhao'));

                if (firstXuhao>=lastXuhao){

                return firstXuhao+1;

                }else{

                 return lastXuhao+1;

                }

                }

               

                p = new Plant({  //设置新增一列的类型

                    xuanze: false,

                    xuhao:getMaxXuhao()//应该获取序列的最大值+1

                });

                }else{

                p = new Plant({

                    xuanze: false,

                    xuhao:1     //此序号得程序自动生成,为主键,不重复

                });

               

                }

              

               

                grid.stopEditing();

                store.insert(0, p);  //插入到第一行

                grid.startEditing(0, 2); //是第一行的第二列可编辑

            }

        },'-',

        {

            text:'删除',

            iconCls:'remove',

            ref:'../removeButton',

            disabled:true,

            handler :function(){

             vars = grid.getSelectionModel().getSelections();

             Ext.MessageBox.confirm('确认框','是否确定删除薪资项?',function(){

            afterDelete(s,store,sm);

             });

            }

        },'-',

       {

            text:'保存',

            iconCls:'save',

            handler :function(){

           varjsonArray=[]; 

          store.each(function(record){

          if(Ext.util.Format.trim(record.get("xinzixiangmu"))!='undefined'&&Ext.util.Format.trim(record.get("xinzixiangmu"))!=''&&Ext.util.Format.trim(record.get("ziduanming"))!='undefined'&&Ext.util.Format.trim(record.get("ziduanming"))!=''){ 

            jsonArray.push(record.data); 

               }else{

              stop=1;

              return false;

               }

                           

           }); 

           if(stop==1){

           //某行的薪资项目或者字段名为空

            Ext.Msg.alert('','薪资项目或字段名称不能为空',function(){

            });

          

             return false;

           }

           varresultJson=Ext.util.JSON.encode(jsonArray);

          Ext.Ajax.request({

              url: '<%=basePath%>webapp/gztgl/xzwh/GztglServlet',//动态页地址

              params: {data:resultJson,status:'save'},//键值对形式

               success:function(response){

              if(response.responseText){

               Ext.Msg.alert('','保存成功',function(){

               showResult(store,sm);

               });

               }else{

                 Ext.Msg.alert('','保存失败');

               }

            }

         });

      }

           

    }]

   });

   查询ajax

   showResult(store,sm);

 

});

 

     functionafterDelete(s,store,sm){

       varxuhaoStr="";

         for(vari = 0, r; r = s[i]; i++){//拼接选中数据的主键去数据库中删除

          xuhaoStr=xuhaoStr+r.data.xuhao+",";

         }

         xuhaoStr = xuhaoStr.substring(0, xuhaoStr.lastIndexOf(','));

          Ext.Ajax.request({

              url: '<%=basePath%>webapp/gztgl/xzwh/GztglServlet',//动态页地址

              params: {xuhaostr:xuhaoStr,status:'delete'},//键值对形式

               success:function(response){

              if(response.responseText){

                   //请求删除成功

             Ext.Msg.alert('','删除成功',function(){

               showResult(store,sm);

               });

               }else{

                   //请求删除失败

             Ext.Msg.alert('','删除失败',function(){

               showResult(store,sm);

               });

              

               }

              

            }

         });

    

     }

 

    functionshowResult(store,sm){

       //刚进页面调用查询

       //保存成功后,调用查询

        Ext.Ajax.request({

                     url:'<%=basePath%>webapp/gztgl/xzwh/GztglServlet',//动态页地址

                     params: {status:'query'},//键值对形式

                      success: function(response){

                      var result=eval('(' + response.responseText +')');

                      var storeArray=[];

                      for (vari=0;i<result.length;i++){

                      var array=[];

                      array.push(sm);

                      array.push(result[i].xh);

                      array.push(result[i].zw);

                      array.push(result[i].zd);

                      storeArray.push(array); 

                      }

                     // var sss=[[sm,99,"基本离退休费","XZ1"],[sm,100,"生活补贴","XZ2"],[sm,98,"交通费","XZ3"]];

                      store.loadData(storeArray);//加载数据

                   }

                });

       }

   </script>

  </head>

  <body>

  <h1></h1>

    <divid="editor-grid"></div>

  </body>

</html>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值