【EasyUI】——可编辑的DataGrid

利用EasyUI做的可编辑的DataGrid大致分为两种类型。一种是启动行编辑的,一种是启动单元格编辑。且不说启动编辑的效果怎样。单启动编辑这一块它就封装的非常厉害。好些功能没有办法去更改。如今项目的一个需求就是在页面上使得DataGrid能够实现这种效果,单击选中行,双击可编辑单元格,失去焦点则保存数据。在研究了整整两天之后,大致能实现。可是差失去焦点保存数据。这篇文章就简单理解一下。可启动单元格编辑的DataGrid是怎样实现的。

首先得加入EasyUI的引用:

<span style="font-family:KaiTi_GB2312;font-size:18px;">    <link href="../../Content/EasyUI/easyui.css" rel="stylesheet" type="text/css" />
    <link href="../../Content/EasyUI/icon.css" rel="stylesheet" type="text/css" />
    <link href="../../Content/EasyUI/demo.css" rel="stylesheet" type="text/css" />
    <script src="../../Content/EasyUI/jquery-1.7.1.min.js" type="text/javascript"></script>
    <script src="../../Content/EasyUI/jquery.easyui.min.js" type="text/javascript"></script></span>

其次是表格的代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;">        <table id="dg" title="管理员管理查询结果" style="width: auto; height: auto"; data-options="onDblClickCell:onClickCell">  @*onDblClickCell指的是双击单元格进行编辑,假设须要单击进行编辑。就改为onClickCell*@
            <thead>
                <tr>
                    <th data-options="field:'AdminID',width:100">管理员工号</th>
                    <th data-options="field:'AdminName',width:100,editor:'text'">姓名</th>
                    <th data-options="field:'AdminPWD',width:80,align:'right',editor:{type:'numberbox',options:{precision:1}}">password</th>
                    <th data-options="field:'AdminLevel',width:80,align:'right',editor:'text'">权限</th>
                    <th data-options="field:'IsUsed',width:60,align:'center',editor:{type:'checkbox',options:{on:'P',off:''}}">是否可用</th>
                </tr>
            </thead>
        </table></span>

最后是JS代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><script type="text/javascript" src="/easyui/datagrid-cellediting.js"></script></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">    <script type="text/javascript">
        function initTable() {
            $("#dg").datagrid({
                url: "Series/QueryBy",  //调用的SeriesController中的QueryBy方法
                width: "100%",  //宽度适应浏览器大小
                fitColumns: true,  //列宽自适应
                idField: 'ID',
                loadMsg: '正在载入用户信息...',
                pagination: true,  //是否分页显示
                singleSelect: false,  //仅仅能选中一条数据
                striped: true,   //行背景交换
                pageSize: 10,    //每一页的大小
                pageNumber: 1,   //当前页数
                pageList: [10, 20, 30],  //每一页显示的条数
                queryParams: {
                    searchName: $("searchName").val()
                },
                columns: [[     //这段代码是给DataGrid列赋值。field就是每一列相应的字段名,title是每一列显示的列首
                    { field: 'ck', checkbox: true, align: 'left', width: 50 },
                    { field: 'ID', title: '主键', width: 50, hidden: true },
                    { field: 'AdminID', title: '管理员工号', width: 50 },
                    { field: 'AdminPassword', title: 'password', width: 50, hidden: true, editor: 'text' },
                    { field: 'AdminName', title: '姓名', width: 50, editor: 'text' },
                    { field: 'AdminLevel', title: '权限', width: 50, editor: 'text' },
                    { field: 'IsUsed', title: '是否使用', width: 55, editor: 'text' }
                ]]
            });
        }

        $(function () {
            initTable();
        });
    </script></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">    <script type="text/javascript">
        $.extend($.fn.datagrid.methods, {
            editCell: function (jq, param) {
                return jq.each(function () {
                    var opts = $(this).datagrid('options');
                    var fields = $(this).datagrid('getColumnFields', true).concat($(this).datagrid('getColumnFields'));
                    for (var i = 0; i < fields.length; i++) {
                        var col = $(this).datagrid('getColumnOption', fields[i]);
                        col.editor1 = col.editor;
                        if (fields[i] != param.field) {
                            col.editor = null;
                        }
                    }
                    $(this).datagrid('beginEdit', param.index);
                    for (var i = 0; i < fields.length; i++) {
                        var col = $(this).datagrid('getColumnOption', fields[i]);
                        col.editor = col.editor1;
                    }

                });
            }
        });

        var editIndex = undefined;
        function endEditing() {
            if (editIndex == undefined) { return true }
            if ($('#dg').datagrid('validateRow', editIndex)) {
                $('#dg').datagrid('endEdit', editIndex);
                editIndex = undefined;
                return true;
            } else {
                return false;
            }
        }

        function onClickCell(index, field) {
            if (endEditing()) {
                $('#dg').datagrid('selectRow', index)    //有这句话则编辑是该行为选中状态,没有这句话则编辑是该行不是选中状态
                $('#dg').datagrid('editCell', { index: index, field: field });
                editIndex = index;
                $('#datagrid-cell').blur( 'editCell',alert("adafsdf"));
            }
        }
    </script></span>

总结

EasyUI有非常多方法都是内部封装的,比方editCell、selectRow等。根本看不出来它详细是怎样实现的。在牛腩、Jquery中。实现可编辑的表格都是自己手写一个表格。然后对表格进行操作,即编辑单元格时,插入一个文本框,编辑结束则文本框隐藏。同一时候也能使用获取焦点和失去焦点的事件。而在这里,当单击或双击单元格进行编辑时。单击或双击完了,单元格就已经失去状态了。并且单元格失去焦点的事件非常难把控。希望大神能够指导一二。

时间: 2024-12-25 02:44:10

【EasyUI】——可编辑的DataGrid的相关文章

市委组织部考核项目——利用EasyUi中可编辑的DataGrid控件对多行数据进行编辑并提交

http://blog.csdn.net/cjr15233661143/article/details/19041165 市委组织部考核项目中需要录入原始数据,拿开发区的数据录入举例说明,见下图,需要给 查询出的单位录入定量成绩和定性成绩,开始使用弹出框的形式逐条进行编辑,后来考虑如果每一条都需要弹出一次弹出框,每一条都需要一次保存的话,用户可能 会不方便,后来发现了easyui中有这么一个好东西,用在这里非常合适——Cell Editing in DataGrid 查询出的结果图 为了控制提交

easyUI在可编辑的datagrid中计算两列的值

在这个教程中你将学习如何包含一个运算的列在可编辑的datagrid中,一个运算列通常包含一些运算值从一个或多个其他列. 查看Demo 首先,创建一个可编辑的datagrid,这就是我们创建的一些可编辑列,'listprice','amount' 和'unitcost' 列定义为numberbox 编辑类型,运算列是 'unitcost'字段, 将是 listprice 乘以 amount列的结果. <table id="tt" style="width:600px;he

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

今天工作用到了easyui行编辑,在这里总结一下,不会的同学可以看看,顺便吐槽一下,网上的很多博客都是粘贴复制的,内容很乱 ,而且看不懂,不知道这些粘贴复制的怀的是什么心,不但没用,还影响别人搜索. 呼吁大家在写博客的时候认真一些,别只粘贴复制,至少可以自己运行好了贴上自己的代码和一点感想,对别人用处很大的. 好了,正题开始--> 我用的是easyui 1.4 效果如下: 点击添加按钮,在第二行的位置添加新行,点击单元格输入内容,点保存通过ajax提交. 修改则直接点击单元格修改,点保存提交.

【Jqurey EasyUI+Asp.net】---DataGrid的增、删、改、查

前面是写了两篇,但都不怎么完整,比较才刚开始学这个,都是摸着石头过河,一步一步的来.这两天终于把DataGrid的增删改查融合到一起了,所以分享一下,希望对和我一样的初学者都点帮助. 直接主题吧. 还是想说数据表吧,我建了一个很简单的表Rex_Test ID 自增序号 tName 姓名 tEmail 邮箱 前台代码: Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile=&quo

EasyUI 可以编辑datagrid

1.主要用到的技术:前端easyui,后台是Spring MVC,Spring data Jpa等. 2.效果展示 3.局部代码展示 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <%@ page contentType="text/html;charset=UTF-8&q

EasyUI可编辑datagrid用combobox实现多级联动

<body> <script type="text/javascript"> $(function(){ var editing ; //判断用户是否处于编辑状态 var flag ; //判断新增和修改方法 $('#set_schedule').datagrid({ idField:'id' , fitColumns: false , url:'scheduleAction_loadScheduleData.action?sureDocumentId='+$(

EasyUI 左侧 tree 右侧 DataGrid模板

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>组织架构管理</title> <script src="jquery-ea

easyui 在编辑状态下,动态修改其他列值。

1 首先是自定义了一个方法uodateColumn更新列值 2 3 /** 4 *自定义的修改列值方法 5 */ 6 $.extend($.fn.datagrid.methods, { 7 updateColumn: function(datagrid,data) { 8 datagrid.each(function(){ 9 //获取缓存中的配置数据 10 var gridObj=$.data(this,"datagrid"); 11 var opts=gridObj.options

实现Easyui 可编辑表格

一.前端框架使用的easyui框架 二.后端使用的是jfinal 三.效果图 四.html代码 <div id="table_tree" class="easyui-panel" id="div_panel" style="width:550px;height:350px;padding-top:5px;overflow:auto;" data-options="border:false"> &