ExtJs GridPanel 完整实例

本文详细介绍了如何使用 ExtJS 创建 GridPanel 的完整实例,包括数据读取、列配置、编辑面板、删除操作和后台数据交互等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ExtJs GridPanel 完整实例

页面效果如下

  

view plaincopy to clipboardprint?
<mce:script type="text/javascript"><!--   
  Ext.onReady(function(){   
       //初始化Extjs   
       Ext.QuickTips.init();   
       Ext.BLANK_IMAGE_URL ='./resources/images/default/s.gif';   
       //首先读取数据,Json格式   
       var store = new Ext.data.Store   
       ({         
           //读取数据源用json方法(三种方法1.读取json用JsonReader,2读取数组使用ArrayReader3.读取XML用XmlReader)   
           reader:new Ext.data.JsonReader   
           ({   
           root:"Table",   
           //从数据库中读取的总记录数   
           totalProperty: 'totalCount',   
           //要读取出来的字段   
           fields:   
           [   
               'ID','RoleName','Remark'  
           ]   
           }),      
           //获取数据源(该方法返回一个json格式的数据源)   
           proxy: new Ext.data.HttpProxy   
           ({   
               url: 'http://www.cnblogs.com/BackGround/RoleManage/Role.ashx?AutoLoad=true'         
           })   
       });   
       //定义GridPanel的列名称   
      var cms=new Ext.grid.ColumnModel   
      (   
      [   
       new Ext.grid.RowNumberer({header:"编号",width:30,align:"center"}),//添加一个编号   
       new Ext.grid.CheckboxSelectionModel(),//增加 CheckBox多选框列   
       //header列名称,dateIndex对应数据库字段名称,sortable支持排序   
       {header:"角色名称",dataIndex:"RoleName",sortable:true},   
       {header:"角色备注",dataIndex:"Remark",sortable:true}   
           
      ]   
      );   
     //编辑panel,用于添加,修改   
     var Edit_Panel=new Ext.FormPanel({       
       labelWidth: 75,    
       labelAlign:'right',   
       frame:true,         
       bodyStyle:'padding:5px 5px 0',   
       width: 380,   
       defaults: {width: 150},   
       defaultType: 'textfield',   
       items:    
       [   
           {   
               fieldLabel: '角色编号',   
               name: 'ID',   
               xtype:'hidden'  
           },   
           {   
               //label名称   
               fieldLabel: '角色名称',   
               //textfield名称   
               name: 'RoleName',   
               //textfield正则   
               allowBlank:false,//是否允许为空!false不允许   
               blankText:"不允许为空",//提示信息   
               minLength :2 ,    
               minLengthText : "姓名最少2个字符",    
               maxLength : 4 ,    
               maxLengthText :"姓名至多4个字符",   
               regex:/[\u4e00-\u9fa5]/,//正则表达式   
               regexText:"只能为中文"  
           },   
           {   
              fieldLabel: '角色编码',   
              name: 'RoleCode',   
              allowBlank:false,   
              blankText:"不允许为空",   
               xtype:'hidden'  
           },   
           {   
            fieldLabel: '说明',   
               name: 'Remark'  
              
           }   
       ]   
      
   });   
    //弹出层   
  var Edit_Window = new Ext.Window({   
       collapsible: true,   
       maximizable: true,   
       minWidth: 300,   
       height :180 ,   
       minHeight: 200,   
       width:378,   
       modal:true,   
       closeAction:"hide",   
       //所谓布局就是指容器组件中子元素的分布,排列组合方式   
       layout: 'form',//layout布局方式为form   
       plain: true,   
       title:'编辑对话框',   
       bodyStyle: 'padding:5px;',   
       buttonAlign: 'center',   
       items: Edit_Panel,   
       buttons: [{   
           text: '保存',   
           //点击保存按钮后触发事件   
           handler:function(){   
           //得到编辑模板中id为ID的控件名称的值   
           var ID=Edit_Panel.getForm().findField('ID').getValue();   
             //得到编辑模板中id为RoleName的控件名称的值   
           var RoleName=Edit_Panel.getForm().findField('RoleName').getValue();   
           //var RoleCode=Edit_Panel.getForm().findField('RoleCode').getValue();   
           var Remark=Edit_Panel.getForm().findField('Remark').getValue();   
           var jsonData='';   
           if(ID=='')   
           //如果ID为空的话说明是添加操作,否则是修改操作,将ID,角色名称(RoleName),角色编码(RoleCode),说明(Remark),操作类型(添加操作:AddUser,更新操作:UpdateUser)写成json的形式作为参数传到后台   
          jsonData= {operatype:'AddRole',ID:ID,RoleName:RoleName,Remark:Remark};   
           else  
          jsonData= {operatype:'UpdateRole',ID:ID,RoleName:RoleName,Remark:Remark};   
           Edit_Window.hide();   
           CodeOperaMethod('http://www.cnblogs.com/WebUI/RoleManage/RoleManege.aspx',jsonData);  
           //重新加载store信息   
           store.reload();   
           grid.store.reload();   
           }   
       },{   
           text: '重置',  handler:function(){Edit_Panel.getForm().reset();}   
       }]   
   });   
          //后台数据交互方法   
      var CodeOperaMethod=function(u,p){   
      var conn=new Ext.data.Connection();   
      conn.request({   
      //请求的 Url   
      http://www.cnblogs.com/hannover/admin/u,   
      // 传递的参数   
      params:p,   
      method:'post',   
      scope:this,   
      //回调函数,根据执行结果作不同的操作,如果成功提示操作成功的信息,如果失败提示失败的信息   
      callback:function(options,success,response){   
      if(success){ Ext.MessageBox.alert("提示","操作成功!");   
      store.reload();   
      grid.store.reload();   
      }   
      else{ Ext.MessageBox.alert("提示","所提交的操作失败!");}   
         
      }});};   
         
        //删除方法   
   function delRecord(btn,pressed)   
   {   
    //获取ID为MenuGridPanel的控件名称得到当前选中项   
    rows = Ext.getCmp("MenuGridPanel").getSelectionModel().getSelections();   
           if(rows.length==0)   
           {   
           Ext.Msg.alert("","请至少选择一行你要删除的数据!");   
           return;   
           }   
    Ext.MessageBox.confirm('提示', '确实要删除所选的记录吗?',showResult);}   
       function showResult(btn)   
       {   
        //确定要删除你选定项的信息   
       if(btn=='yes')   
       {   
           var row=Ext.getCmp("MenuGridPanel").getSelectionModel().getSelections();   
           var jsonData="";   
           for(var i=0,len=row.length;i<len;i++)   
           {   
           //得到当前选中项的ID集合   
           var ss =row[i].get("ID");   
            if(i==0)   
            jsonData = jsonData + ss;    
            else  
            jsonData = jsonData + ","+ ss;    
        }   
        //将要删除的信息传递到后台处理,然后重新加载grid   
        var conn = new Ext.data.Connection();   
        conn.request({   
        http://www.cnblogs.com/hannover/admin/WebUI/RoleManage/RoleManege.aspx?DelRecode=",    
        params:{strProjects:jsonData},   
        method: 'post',   
        scope: this,   
        callback:function(options,success, response){    
        if(success){    
        Ext.MessageBox.alert("提示","所选记录成功删除!");   
        store.reload();   
        grid.store.reload();   
        }    
        else    
        { Ext.MessageBox.alert("提示","所选记录删除失败!");}    
        }    
        })   
           
        }   
        };    
      //定义一个智能感应的ComboBox   
      var cmbox=new Ext.form.ComboBox   
      (   
      {   
        id:'cmbox',   
        title:'角色名称',   
        //加载数据源   
        store:store,   
        //从本地加载数据(智能感应效果)   
        mode:"local",   
        //显示字段类似DropDownlist中的DataTextField    
        displayField:'RoleName',   
        //类似DropDownlist中的DataValueField     
        valueField:'ID',   
        width:160,   
        //不允许为空   
        allowBlank:false,   
        //默认值   
    emptyText:'请输入角色名称进行搜索...',   
    //当为空的时候提示   
    blankText:'请输入角色名称...'  
      }   
      );   
      //构建GridPanel   
       var grid = new Ext.grid.GridPanel   
       ({   
           id:'MenuGridPanel',   
           renderTo:"gridpanel",//将GridPanel添加到id为gridpanel的区域   
           title: '角色管理',//网格标题   
           width:'100%',   
           height: 500,   
           store: store,//grid数据源   
           loadMask: {msg:'加载数据中,请等待......'},//显示等待数据加载(loading)图标   
           cm:cms,//列名称   
           sm: new Ext.grid.CheckboxSelectionModel(),//要显示多选框列必加此项   
           //定义一个toolbar   
           tbar:   
           [               
       {   
       text:"编辑",   
          cls: 'x-btn-text-icon details',   
          icon:"../ext-3.1.0/blue16_042.png",   
          handler:function()   
          {   
           //重置编辑模板   
          Edit_Panel.getForm().reset();   
          rows = Ext.getCmp("MenuGridPanel").getSelectionModel().getSelections();   
       if(rows.length!=1)   
       {   
       Ext.Msg.alert("","请你选择一行数据进行操作!");   
       return;   
       }   
       //打开窗体   
        Edit_Window.show();   
        //将选中项的信息绑定到TextField中   
        Edit_Panel.getForm().findField('ID').setValue(rows[0].get('ID'));   
           //Edit_Panel.getForm().findField('RoleCode').setValue(rows[0].get('RoleCode'));   
           Edit_Panel.getForm().findField('RoleName').setValue(rows[0].get('RoleName'));   
           Edit_Panel.getForm().findField('Remark').setValue(rows[0].get('Remark'));   
              
       }   
       },    
       {   
       text:"添加",   
        cls: 'x-btn-text-icon details',   
        icon:"../ext-3.1.0/add_16.png",   
        handler:function()   
          {   
          Edit_Panel.getForm().reset();   
          Edit_Window.show();   
          }   
          },    
       {   
       text:"删除",   
           cls: 'x-btn-text-icon details',   
            icon:"../ext-3.1.0/blue16_016.png",   
           handler:delRecord   
           },'-',   
              
           //定义一个搜索框   
           cmbox,   
             '-',   
           {   
              
       xtype:'button',   
        cls: 'x-btn-text-icon details',   
          icon:"../ext-3.1.0/blue16_068.png",   
       text:"查找",   
       handler:function()   
       {   
        //Ext.getCmp("searchfield").getValue()得到Textfield的值   
        //过滤条件为角色名称(RoleName)来搜索匹配的信息,   
        //filter方法第一个参数:过滤的字段名称,第二个参数要匹配的信息,   
        //第三个参数true表示从开始位置开始搜索,第四个参数false表示不区分大小写   
        store.filter('RoleName',Ext.getCmp("cmbox").getValue(),false,false);   
       }   
       }   
         
          ],   
           bbar: new Ext.PagingToolbar   
           ({//自带分页工具条   
               pageSize: 10,   
               store: store,   
               displayInfo: true,   
               displayMsg: '当前为第[{0}]</span>条至第[{1}]条数据,共[{2}]条数据',   
               emptyMsg: "没有数据"  
           })   
       });   
       //从Json中加载数据start为0表示显示默认第一页,limit表示每页显示的数量为10   
       store.load({params:{start:0, limit:10}});   
   });   
  
      
/ --></mce:script> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值