easyui行编辑:利用append row添加行,直接在行中编辑,ajax提交保存

今天工作用到了easyui行编辑,在这里总结一下,不会的同学可以看看,顺便吐槽一下,网上的很多博客都是粘贴复制的,内容很乱 ,而且看不懂,不知道这些粘贴复制的怀的是什么心,不但没用,还影响别人搜索。

呼吁大家在写博客的时候认真一些,别只粘贴复制,至少可以自己运行好了贴上自己的代码和一点感想,对别人用处很大的。

好了,正题开始——>

我用的是easyui 1.4

效果如下:

点击添加按钮,在第二行的位置添加新行,点击单元格输入内容,点保存通过ajax提交。

修改则直接点击单元格修改,点保存提交。

代码如下:

首先table还是平常的table,只不过要在需要编辑的列加上editor:‘text‘ 我这里只是编辑文本,所以是text,其他时间等类型请查api,

另外因为我触发修改的方式是直接点击单元格,所以table要加上onClickCell属性,然后重写onClickCell方法。

$("#remark_dg").datagrid({
            url:‘‘,
            columns:[[
                {field:‘cb‘,checkbox:true,align:‘center‘},
                {field:‘id‘,title:‘编号‘,width:80,hidden:true},
                {field:‘text‘,title:‘内容‘,width:80,editor:‘text‘}
            ]],
            toolbar:‘#remark_tb‘,  //表格菜单
            fit:true,
            fitColumns:true,
            loadMsg:‘加载中...‘, //加载提示
            rownumbers:true, //显示行号列
            singleSelect:true,//是允许选择一行
            onClickCell: onClickCell,
            queryParams:{   //在请求数据是发送的额外参数,如果没有则不用写
            },
            onLoadSuccess:function(data){
            },
            rowStyler:function(index,row){
            }
        });

简单说明下可编辑的实现方法:

首先通过beginEdit让选中的行启动编辑,保存的时候,获得选中的行,通过row取到编辑的信息,使用ajax提交,提交完成,使用endEdit属性结束行编辑。

 //可编辑行
    var editIndex = undefined;
    function endEditing(){
        if (editIndex == undefined){return true}
        if ($(‘#remark_dg‘).datagrid(‘validateRow‘, editIndex)){
            $(‘#remark_dg‘).datagrid(‘endEdit‘, editIndex);
            editIndex = undefined;
            return true;
        } else {
            return false;
        }
    }
    function onClickCell(index, field){
        if (editIndex != index){
            if (endEditing()){
                $(‘#remark_dg‘).datagrid(‘selectRow‘, index)
                        .datagrid(‘beginEdit‘, index);
                var ed = $(‘#remark_dg‘).datagrid(‘getEditor‘, {index:index,field:field});
                ($(ed.target).data(‘textbox‘) ? $(ed.target).textbox(‘textbox‘) : $(ed.target)).focus();
                editIndex = index;
            } else {
                $(‘#remark_dg‘).datagrid(‘selectRow‘, editIndex);
            }
        }
    }
    function accept(){
        if (endEditing()){
            var row = $(‘#remark_dg‘).datagrid(‘getSelected‘);
            var text = row.text;
            var remarkid = row.id;
            var typeid = $("#typeid").val();
            $.ajax({
                url:"${ctx}/typeRemark/addTypeRemark.do",
                type:"post",
                dataType:"json",
                data:{
                    remarkid:remarkid,
                    text:text,
                    typeid:typeid
                },
                success:function(data){
                    if(data.status == "success"){
                        $.messager.show({
                            title : ‘提示‘,
                            msg : ‘操作成功‘
                        });
                        $(‘#dg‘).datagrid(‘load‘, {});
                    }else{
                        $.messager.show({
                            title : ‘提示‘,
                            msg : ‘操作失败,请联系管理员 ------‘
                        });
                    }
                },
                error:function(){
                        $.messager.show({
                            title : ‘提示‘,
                            msg : ‘系统错误,请联系管理员------‘
                        });
                }
            });
        }
    }
    function addRemark(){
         function addRemark(){
        if (editIndex != undefined){
            return ;
        }
        $(‘#remark_dg‘).datagrid(‘insertRow‘,{
            index: 1,   // 索引从0开始
            row: {
                text:‘‘
            }
        });
        $(‘#remark_dg‘).datagrid(‘selectRow‘, 1);
        $(‘#remark_dg‘).datagrid(‘beginEdit‘, 1);
        var ed = $(‘#remark_dg‘).datagrid(‘getEditor‘, {index:1,field:‘text‘});
        $(ed.target).focus();
        editIndex = 1;
    }
    }

这里有必要提一下,我的添加和修改方法用了一个方法accpet(),同时后台也用一个方法处理的,有需要的可以借鉴一下:

表现层用的是spring mvc,持久成用的hibernate:

@RequestMapping(value = "/addTypeRemark.do",method = RequestMethod.POST)
    @ResponseBody
    public Map<String,String> addTypeRemark(String text,String typeid,@RequestParam(value = "remarkid", required = false)Integer remarkid,HttpServletRequest request){
        Map<String,String>  map = new HashMap<String,String> ();
        System.out.println(typeid);
        try {
            BatchType batchType=batchTypeMag.find(Integer.parseInt(typeid));
            TypeRemark typeRemark = new TypeRemark();
            if(remarkid!=null){
                typeRemark = typeRemarkMag.find(remarkid);
            }
            typeRemark.setBatchType(batchType);
            typeRemark.setText(text);
            typeRemarkMag.saveOrUpdate(typeRemark);
            map.put("status","success");
        } catch (Exception e) {
            e.printStackTrace();
            map.put("status","fail");
        }
        return map;
    }

也就是说,添加的时候,没有这条记录的id,修改的时候需要通过记录的id修改,所以可以判断一下。

这样,easyui动态编辑行就完成啦

时间: 2024-10-03 22:54:04

easyui行编辑:利用append row添加行,直接在行中编辑,ajax提交保存的相关文章

架构模式数据源模式之:表数据入口(Table Data Gateway)、行数据入口(Row Data Gateway)、活动记录(Active Record)

一:表数据入口(Table Data Gateway) 表数据入口提供了用于访问单个表或者视图(也包含了联表查询)的所有SQL,通常一个表一个类.其它代码通过它来实现对数据库的交互.基于这个特点,表数据入口和事务脚本代码以及表模块结合的很好. 在查询时候,表数据接口可以返回数据集 或者 DTO 或者 DTO列表.在 事务脚本 代码中已经阐述过了 DTO 以及 DTO 的列表这种形式.但是使用 DTO 这种形式,带来的一个问题是:到处衍生的 DTO,那么,如何减少到处衍生的 DTO 的,见这里<>

JavaScript利用append添加元素报错

1.错误描述 在IE浏览器上: Uncaught HierarchyRequestError:Failed to excute 'appendChild' on 'Node':The new child element contains the parent. 在谷歌浏览器上: SCRIPT5022:DOM Exception:HIERARCHY_REQUEST_ERR(3) error 2.错误原因 在append()中包含append() 如: append(append("String&q

EasyUI Treegrid的使用--初始化、添加同级节点、字节节点、保存数据以及保存二进制文件

前序:该篇文章将treegrid的使用,侧重于添加节点的方法,如何保存节点到数据库.不过获取节点数据的方法有点傻.将就着,若下次还遇到使用treegrid的情况,将会好好研究一下如何更好的传递节点数据到后台.另外,文章的代码存在小问题.不过都被我用取巧的方法解决掉. 存在的问题:为什么选中根节点后,用getSelected方法,得到的是null?? 取巧的解决方法:初始化treegrid时,顺便加载onClickRow()方法,当选中一行的时候,将该行的id赋值到全局变量selectedSelf

利用VisualVM监测Azure云服务中的Java应用

在做Java开发的时候,我们需要在上线之前对程序进行压力测试,对程序的性能进行全面的监控,了解JVM的CPU,内存,GC,classes,线程等等信息,或者在程序上线运行的过程当中以便于诊断问题或者对程序做出优化,市面上做Java profiling的工具也比较多,比如商业的JProfiler,JClarity等,也有免费的JDK自带的工具,如VisualVM,JConsole,JMC等等,那么当我们将Java应用程序部署到了Azure Cloud Service中,如何利用这些工具做性能监控和

Word 2003中编辑标记与格式标记大讨论

问题 Word 2003中编辑标记与格式标记是不是一回事? 我花费了很多时间在网络上查询,看到有一个论坛上有一个提到,这两个说法是一回事.更奇怪的是,不少WORD大师级人物,也没有解释好这两个说法. 我在WORD 2003帮助系统下输入搜索关键字"编辑标记",得到的结论如下: 显示或隐藏格式标记 单击"常用"工具栏上的"显示/隐藏编辑标记" . 提示 通过单击"工具"菜单上的"选项",再单击"视图

asp.net中利用JSON进行增删改查中运用到的方法

//asp.net中 利用JSON进行操作, //增加: //当点击"增加链接的时候",弹出增加信息窗口,然后,在窗体中输入完整信息,点击提交按钮. //这里我们需要考虑这些:我会进行异步提交,使用jquery中的方法,$.post("网页名",JSON,callback); //JSON的写法:{"name":name,"id":id},那我们对其进行假设,比方说,表单中的textbox很多,需要我们填写的信息 //也很多,

利用Entity Framework修改指定字段中的值

利用Entity Framework修改指定字段中的值一般我们编辑某些模型的时候会用到类似这样的代码: [HttpPost] public ActionResult Edit(Article model) { if (model.Id == 0) { return HttpNotFound(); } using (db) { db.Entry(model).State = EntityState.Modified; db.SaveChanges(); } return RedirectToAct

在网页中编辑报表的报表设计器Stimulsoft Reports Designer.Web报表控件

Stimulsoft Reports Designer.Web报表控件是一款网页报表设计器.您想在网页中编辑您的报表吗?现在是可能的! Stimulsoft Reports Designer.Web -是第一款使您可以完全在网页中编辑报表的报表设计器.在您的客户端机器里不需要安装.Net框架.ActiveX控件或其他特殊的插件.您只需要一个Web浏览器. Stimulsoft Reports Designer.Web是新式和便捷的接口并且功能丰富以及工作快速. 操作简单将报表编辑的支持添加到您的

在IDEA中编辑struts国际化properties文件

在IDEA中编辑struts国际化properties文件 如果手工创建的web工程,struts的i18n属性文件,可以使用native2ascii工具转换(记得命令行的第二个文件名是要保存的文件名,如果不写,不会自动修改原文件的). 如果是Eclipse,应该可以以图形化方式编辑. 如果是IDEA, 可以用如下方法编辑: 更改系统配置:Preferences–>Editor–>FileCodings,选中“Transparent native-to-ascii conversion”. 至