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> 

 

 

posted @ 2010-12-16 10:39  hannover  阅读(11383)  评论(0编辑  收藏  举报