【原】提高篇:第十八篇,ext2.2打造全新功能grid系列--编辑修改篇

只所以把这个作为系列之一,主要的就是说明如何获取数据以及在点编辑按钮时,如何将数据动态绑定到窗体对应的字段里面
在获取记录时首先需要选中某条数据前面的复选框,否则会有有自定义的消息提示你如何正确的操作.

下面来看看两则效果图,和上篇的样式一样,只是功能不一样而已,同样数据的来源和后代代码的实现都是一样的,也包含了如何获取数据和验证数据以及与后台传递数据的方式,仅仅没有在服务器端实现编辑的功能,事实上这个功能和vs.net的实现方式没有区别,唯一要注意的是就是返回json格式的数据.

上面的grid列表的分页栏里就实现了添加编辑按钮的功能,在没有选中任何数据的时候,会弹出下面的窗口提示,如果选中了多行数据,默认情况下也是对第一条数据进行编辑修改.先看图吧:

上面这个消息框就是对没有正确操作编辑按钮所弹出的消息,如果首先选中了数据后再点编辑按钮,就会直接出现下面的编辑修改窗口

上面的窗口就是在选择数据后弹出的窗口,里面的数据自动绑定.

下面把客户端的完整代码贴出来:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="gridUpdate.aspx.cs" Inherits="gridUpdate" %>

<!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 runat="server">
    <title>无标题页</title>
    <link rel="Stylesheet" type="text/css" href="ExtJS/resources/css/ext-all.css" />
    <link rel="Stylesheet" type="text/css" href="ExtJS/resources/css/xtheme-green.css" />
    <script type="text/javascript" src="ExtJS/adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="ExtJS/ext-all.js"></script>
    <script type="text/javascript" src="ExtJS/ext-lang-zh_CN.js"></script>
    <style type="text/css">
    .panel_icon { background-image:url(images/first.gif)}
    .center_icon { background-image:url(images/house.png)}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <script type="text/javascript">   
    function ready()
    {
        //添加下面这句,有助于当鼠标放在Ext自带的图标上时能够显示提示的功能
        Ext.QuickTips.init();
       
        var url = "jsonGrid.aspx?Param=select";
        var sm = new Ext.grid.CheckboxSelectionModel();
       
        var cm = new Ext.grid.ColumnModel
        ([       
            sm,new Ext.grid.RowNumberer({header:"编号",width:50}),
            {header:"编号",dataIndex:"ID",width:10,hidden:true},
            {header:"标题",dataIndex:"TypeCName",width:100,editor:new Ext.form.TextField()},
            {header:"英文名称",dataIndex:"TypeEName",width:100,editor:new Ext.form.TextField()},
            {header:"状态",dataIndex:"DelFlag",width:100,renderer:function(value){if(value==false) {return "显示";} else {return "隐藏";}}},
            {header:"添加日期",dataIndex:"AddDate",width:100,renderer:Ext.util.Format.dateRenderer('Y年m月d日')}
        ]);
        cm.defaultSortable = true;
        var fields =
            [
                {name:"ID"},
                {name:"TypeCName"},
                {name:"TypeEName"},
                {name:"DelFlag"},
                {name:"AddDate"}
           ];
        var store = new Ext.data.Store
        ({
            proxy:new Ext.data.HttpProxy({url:url}),
            reader:new Ext.data.JsonReader({totalProperty:"totalPorperty",root:"root",fields:fields})
        });
        store.load({params:{start:0,limit:15}});
       
        var pagingBar = new Ext.PagingToolbar
        ({
            displayInfo:true,
            emptyMsg:"没有数据显示",
            displayMsg:"显示从{0}条数据到{1}条数据,共{2}条数据",
            store:store,
            pageSize:15,
            items:
            [
                ' ',
                {
                    enableToggle: true,
                    text: '刷新',
                    cls: 'x-btn-text-icon details',icon:"images/plugin.gif",
                    toggleHandler: function(btn, pressed)
                    {
                        //动态加重新载数据列表
                        Ext.getCmp("MenuGridPanel").store.reload();
                    }
                },
                '-',
                {
                    enableToggle: true,//TypeTable实体类 ID PID TypeEName TypeCName DelFlag AddDate
                    text: '编辑',
                    cls: 'x-btn-text-icon details',icon:"images/plugin.gif",
                    toggleHandler: function(btn, pressed)
                    {                       
                        var TypeENameValue;
                        var TypeCNameValue;
                        var DelFlagValue;
                        var AddDateValue;
                        var IDValue;
                        var rows = Ext.getCmp("MenuGridPanel").getSelections();
                        if(rows.length>=1)
                        {
                            IDValue = rows[0].json.ID;
                            TypeENameValue = rows[0].json.TypeEName;
                            TypeCNameValue = rows[0].json.TypeCName;
                            DelFlagValue = rows[0].json.DelFlag;
                            AddDateValue = rows[0].json.AddDate;
                        }
                        else
                        {
                            Ext.Msg.alert("提示消息","请选择一行数据然后才能够编辑。<br/>如果选择多行数据,默认情况下只对第一行有效!");return false;
                        }
                        var win = new Ext.Window
                        ({
                             title:"编辑修改记录窗口",
                             width:257,
                             height:200,
                             layout:'form',
                             modal:true,
                             resizable:false,
                             iconCls :"center_icon",
                             items:
                             [
                                 {
                                    xtype:"form",
                                    height:200,
                                    labelPad : 0,// 标签与字段录入框之间的空白
                                    bodyStyle : 'padding-top:3px',
                                    frame : true,
                                    defaultType : 'textfield',
                                    labelAlign : 'right',
                                    labelWidth : 55,
                                    defaults : // 容器中组件默认统一配置选项
                                    {
                                        allowBlank : false,width : 150// 字段宽度                           
                                    },
                                    items :
                                    [
                                         {fieldLabel:"标题",id:"TypeCName",maxLength:50,value:TypeCNameValue},
                                         {fieldLabel:"英文名称",id:"TypeEName",maxLength:50,value:TypeENameValue},
                                         {xtype:"datefield",fieldLabel:"添加日期",value:AddDateValue,id:"AddDate",renderer:Ext.util.Format.dateRenderer('Y年m月d日 h:m:s')},
                                         {fieldLabel:"状态",id:"DelFlag",maxLength:5,value:DelFlagValue}
                                    ]
                                 }
                             ],
                             buttons:
                             [
                                 {
                                    xtype:"button",text:"确定修改",cls:"x-btn-text-icon",icon:"images/add.gif",
                                    handler:function()
                                    {
                                        //这里获取表单的数据
                                        var typeCName = Ext.getCmp("TypeCName").getValue();
                                        var typeEName = Ext.getCmp("TypeEName").getValue();
                                        var addDate = Ext.getCmp("AddDate").getValue();
                                        var delFlag = Ext.getCmp("DelFlag").getValue();
                                        //同时可以对上面获取的数据添加验证
                                        Ext.Ajax.request
                                        ({
                                            http://www.cnblogs.com/mogen_yin/admin/%22jsonGrid.aspx?Param=edit",//添加 url 具体在哪个页面实现编辑修改功能
                                            params:{ParamName:"good",TypeCNameParam:typeCName},//客户端页面向服务器断传递数据,前面是参数名称,后面是参数值,多个参数用逗号分隔开
                                            success:function(respose,option)
                                            {
                                                //如果在服务器端正确处理了数据并且返回了正确的值得就执行该函数的语句
                                                //将服务器端正确返回的json字符串转换横Ext对象,然后就能够使用
                                                var result = Ext.util.JSON.decode(respose.responseText);
                                                //当确定添加成功后再执行下面的语句,动态加载数据列表
                                                Ext.getCmp("MenuGridPanel").store.reload();
                                            },
                                            failure:function()
                                            {
                                                //如果在服务器端处理数据发生了异常,就执行该函数的语句
                                            }
                                        });
                                    }
                                 },
                                 {
                                    xtype:"button",text:"关闭退出",cls:"x-btn-text-icon",icon:"images/delete.gif",
                                    handler:function()
                                    {
                                        win.destroy();
                                    }
                                 }
                             ],
                             buttonAlign:"center"
                        });
                        win.show();
                    }
                                  
                }, ' ' 
            ]  
        });
        var grid = new Ext.grid.GridPanel
        ({
            id:"MenuGridPanel",
            renderTo:document.body,
            layout:"fit",
            frame:true,
            border:true,
            width:700,
            height:450,
            autoScroll:true, 
            store:store,
            sm:sm,
            cm:cm,
            viewConfig:{forceFit: true},
            title:'<img style="height:auto; width:auto;" src="images/first.gif" /> Ext2.2全新功能版系列之--编辑修改',
            bbar:pagingBar
        });
    }
    </script>   
    <script type="text/javascript">
    Ext.onReady(ready);
    </script>
    </div>
    </form>
</body>
</html>

再集中展示下效果图

 

 

Tag标签: EXT,grid,pagingbar
posted @ 2008-10-28 17:23 殷良胜 阅读(1617) 评论(9)  编辑 收藏 网摘

  回复  引用  查看    
#1楼[楼主]2008-10-30 13:01 | 殷良胜      
  回复  引用    
#2楼2009-01-04 13:30 | KGIer[未注册用户]
toggleHandler: function(btn, pressed)
这句能讲下吗?
我不是很明白,ToggeHandler它里面有两个参数,这个btn是怎么定义的,还有这个pressed是函数还是?
看了,很是不明白
期待你的解答,谢谢!

  回复  引用    
#3楼2009-03-18 10:20 | R_ocky[未注册用户]
胜哥,jsonGrid.aspx这个页的源代码有没有呀?能从那里去找到?能不能给我邮箱里发一份呀?R_ocky@hotmail.com,非常感谢!
  回复  引用  查看    
#4楼[楼主]2009-03-18 21:23 | 殷良胜      
--引用--------------------------------------------------
R_ocky: 胜哥,jsonGrid.aspx这个页的源代码有没有呀?能从那里去找到?能不能给我邮箱里发一份呀?R_ocky@hotmail.com,非常感谢!
--------------------------------------------------------
呵呵
这个是返回json字符串的页面
你自己建一个这样的页面
然后只保留该页面的最上一行代码即可

  回复  引用    
#5楼2009-05-25 17:03 | 刘liu[未注册用户]
胜哥 如果我要在里面直接编辑后 要怎样才能去保存呢 怎么发现没这方面的例子啊 可以麻烦胜哥写一个吗
  回复  引用  查看    
#6楼[楼主]2009-05-28 23:06 | 殷良胜      
--引用--------------------------------------------------
刘liu: 胜哥 如果我要在里面直接编辑后 要怎样才能去保存呢 怎么发现没这方面的例子啊 可以麻烦胜哥写一个吗
--------------------------------------------------------

  回复  引用    
#7楼2009-05-31 09:57 | 刘liu[未注册用户]
在哪里呢
  回复  引用  查看    
#8楼[楼主]2009-05-31 10:35 | 殷良胜      
--引用--------------------------------------------------
刘liu: 在哪里呢
--------------------------------------------------------
最近忙 暂时没得空闲

  回复  引用    
#9楼2009-05-31 19:38 | 张雷98123[未注册用户]
版主你好,我刚学习ext,遇到了个小问题,ColumnModel添加RowNumberer后页面不能加载,能帮忙看一下吗,谢谢了,源码如下:

<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text ml; charset=UTF-8">
</head>
<link rel="stylesheet" type="text/css" href="../ext-2.2/resources/css/ext-all.css" />
<script type="text/javascript" src="../ext-2.2/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../ext-2.2/ext-all.js"></script>
<body>
<div id="grid"></div>
</body>
< ml>
<script type="text/javascript">
Ext.onReady(function(){
var sm = new Ext.grid.CheckboxSelectionModel({singleSelect:true});

var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
{header:'编号',dataindex:'xh',sortable:true},
{header:'姓名',dataindex:'name'}
]);
var data=[
[1,'tom'],
[2,'slice'],
[3,'frank']
];
var ds = new Ext.data.Store(
{
proxy:new Ext.data.MemoryProxy(data),
reader: new Ext.data.ArrayReader({},[
{name:'xh'},
{name:'name'}
]
),
autoLoad:true
}
);
var grid = new Ext.grid.GridPanel({
renderTo:'grid',
store: ds,
width: 800,
autoHeight:true,
cm: cm,
viewConfig:{forceFit:true}
}
);
grid.render();
})

</script>
提示this.ds.fields.get(C) is undefined

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1321513




相关文章:

相关链接: