easyui-datagrid 增删改查

easyui-datagrid 增删改查  ,支持对行进行双击编辑修改, 从页面到后台的代码,绿色部分为转为为json字符串


html 页面代码


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>operateDataGrid.html</title>
    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <link rel="stylesheet" href="../css/themes/default/easyui.css" type="text/css"></link>
    <link rel="stylesheet" href="../css/themes/icon.css" type="text/css"></link>
    <script type="text/javascript" src="../js/jquery-1.7.1.min.js"></script>
    <script type="text/javascript" src="../js/jquery.easyui.min.js"></script>
    <!-- 引入中文资源 -->
    <script type="text/javascript" src="../js/easyui-lang-zh_CN.js"></script>
    <script type="text/javascript" src="operateDataGrid.js"></script>

    <script type="text/javascript">
        //设置datagrid自适应
        $(window).resize(function () {
            $('#dataGrid').datagrid('resize')
        });
    </script>
  </head>
 
  <body>
      <div width="100%">
        <table id="dataGrid"></table>
    </div>
  </body>
</html>


operateDataGrid.js 代码


var dataGridOper;
//定义右键点击时选择的行
var rightIndex = -1;

$.extend($.fn.datagrid.methods, {
    //增加时有编辑框
    //第一个参数组件本身,第二个参数要传递的参数
    addEditor: function(jq, param){
        if (param instanceof Array) {
            $.each(param, function(index, item){
                var e = $(jq).datagrid('getColumnOption', item.field);
                e.editor = item.editor;
            });
        }
        else {
            var e = $(jq).datagrid('getColumnOption', param.field)
            e.editor = param.editor;
        }
    },
    //修改时没编辑框
    //编辑时使用可以跳过指定的列编辑,对某些列不需要编辑
    // 如 datagrid('removeEditor','password'),不让编辑密码
    removeEditor: function(jq, param){
        if (param instanceof Array) {
            $.each(param, function(index, item){
                var e = $(jq).datagrid('getColumnOption', item);
                e.editor = {};
            });
        }
        else {
            var e = $(jq).datagrid('getColumnOption', param)
            e.editor = {};
        }
    }
})

/**
 * 扩展datagrid的列editor
 * @param {Object} container
 * @param {Object} options
 */
$.extend($.fn.datagrid.defaults.editors, {
    //扩展datatimebox
    datetimebox: {
        init: function(container, options){
            //初始化datatimebox
            var input = $('<input />').appendTo(container);
            //不可输入
            options.editable = false;
            input.datetimebox(options);
            return input;
        },
        getValue: function(target){
            return $(target).datatimebox('getValue');
        },
        setValue: function(target, value){
            $(target).datatimebox('setValue', value);
        },
        resize: function(target, width){
            $(target).datatimebox('resize', width);
        },
        destroy: function(target){
            //销毁datetimebox弹出的panel
            $(target).datatimebox('destroy');
        }
    },
    //单选框
    radioButton: {
        init: function(container, options){
            //初始化datatimebox
            var input = $('<input type="radio" name="radio" value="M" />男 &nbsp;<input type="radio" name="radio" value="F" />女&nbsp;').appendTo(container);
            return input;
        },
        getValue: function(target){
            alert($(target).val())
            return $(target).val();
        },
        setValue: function(target, value){
            $(target).val(value);
        },
        resize: function(target, width){
        }
    }
});

//js获取项目根路径,如: http://localhost:8088/jquery
function getRootPath(){
    //获取当前网址,如: http://localhost:8088/jquery/easyui/login.jsp
    var curWwwPath = window.document.location.href;
    //获取主机地址之后的目录,如: jquery/easyui/login.jsp
    var pathName = window.document.location.pathname;
    var pos = curWwwPath.indexOf(pathName);
    //获取主机地址,如: http://localhost:8088
    var localhostPaht = curWwwPath.substring(0, pos);
    //获取带"/"的项目名,如:/jquery
    var projectName = pathName.substring(0, pathName.substr(1).indexOf('/') + 1);
    return (localhostPaht + projectName);
}

$(function(){
    operateDataGrid();
});


var operateDataGrid = function(){

    //用于存放操作记录
    var operator = "";
    //存放编辑的行号
    var editorRow = -1;
    dataGridOper = $('#dataGrid').datagrid({
        url: getRootPath() + '/operateDataGrid?operator=selectData',
        method: 'post',
        title: '用户信息',
        fitColumns: true,
        width: '100%',
        height: 335,
        loadMsg: 'loading',
        striped: true,
        //idField: 'oid',
        rownumbers: true,
        //设置默认排序字段
        sortName: 'username',
        columns: [[{
            field: 'oid',
            title: '编号',
            width: 100,
            align: 'center',
            //设置可以排序,则不显示此列
            checkbox: true
        }, {
            field: 'username',
            title: '姓名',
            width: 100,
            align: 'center',
            //设置可以排序
            sortable: true,
            editor: {
                //string,object string 时指编辑类型,当 object 是options:对象,编辑类型对应的编辑器选项
                type: 'validatebox',
                options: {
                    required: true
                }
            }
        }, {
            field: 'gender',
            title: '性别',
            width: 100,
            align: 'center',
            sortable: true,
            editor: {
                //string,object
                type: 'validatebox'
            
            },
            formatter: function(value, rowData, rowIndex){
                return (($.trim(value) == "F") ? "女" : "男");
            }
        }, {
            field: 'phonenum',
            title: '电话',
            width: 100,
            align: 'center',
            sortable: true,
            editor: {
                //string,object
                //type: 'datetimebox',
                type: 'text',
                options: {
                    required: true
                }
            }
        }]],
        pagination: true,
        //工具栏,每个都是一个LinkButton
        toolbar: [{
            id: 'idAdd',
            text: '增加',
            iconCls: 'icon-add',
            plain: 'true',
            //按钮事件
            handler: function(){
                //控制一次只能添加一行
                if (editorRow == -1) {
                    //增加时可以对用户名进行编辑
                    dataGridOper.datagrid('addEditor', {
                        field: 'username',
                        editor: {
                            //string,object string 时指编辑类型,当 object 是options:对象,编辑类型对应的编辑器选项
                            type: 'validatebox',
                            options: {
                                required: true
                            }
                        }
                    });
                    
                    
                    
                    operator = "insertData";
                    //在第一行增加
                    dataGridOper.datagrid('insertRow', {
                        //index:插入进去的行的索引,如果没有定义,就追加此新行,row:行的数据
                        index: 0,
                        row: {
                            //初始化的数据
                            username: '请输入姓名',
                            gender: '请填写性别',
                            phonenum: '请填写电话'
                        }
                    });
                    //队列进行编辑时必须在columns中列设置editor属性
                    //开始第一行进行编辑,参数index 索引
                    dataGridOper.datagrid('beginEdit', 0);
                    editorRow = 0;
                }
                else {
                    $.messager.alert('提示', '请先保存正在修改的数据', 'warning');
                    //dataGridOper.datagrid('endEdit', editorRow);
                }
                
            }
        }, '-', {
            id: 'idDelete',
            text: '删除',
            disabled: true,
            iconCls: 'icon-remove',
            //按钮事件
            handler: function(){
                //获取选中的行数
                var rows = dataGridOper.datagrid('getSelections');
                if (rows.length > 0) {
                    //存放选中行的id
                    var ids = [];
                    for (var i = 0; i < rows.length; i++) {
                        ids.push(rows[i].oid);
                    }
                    //调用后台删除
                    $.ajax({
                        type: "POST",
                        url: getRootPath() + '/operateDataGrid?operator=delData',
                        data: 'ids=' + ids.join(','),
                        dataType: 'text',
                        success: function(msg){
                            if (msg == "success") {
                                //title, msg, icon, fn
                                $.messager.alert('系统提示', '删除成功', 'info', function(btn){
                                    //回调函数
                                    dataGridOper.datagrid('load');
                                });
                            }
                            else
                                if (msg == 'noData') {
                                    $.messager.alert('系统提示', '请选择要删除的数据', 'warning')
                                }
                                else {
                                    $.messager.alert('系统提示', '删除失败', 'error')
                                }
                        },
                        error: function(XMLHttpRequest, textStatus, errorThrown){
                            $.messager.alert('系统提示', '删除失败:' + textStatus, 'info')
                        }
                    })
                }
                else {
                    //title, msg, icon, fn
                    $.messager.alert('系统提示', '请选择索要操作的数据', 'info');
                }
                
            }
        }, '-', {
            id: 'idEdit',
            text: '修改',
            iconCls: 'icon-edit',
            disabled: true,
            handler: function(){
                //控制一次只能编辑一行
                var rows2 = dataGridOper.datagrid('getSelections');
                //console.info(rows2[0]);
                //一次只能编辑一行
                if (rows2.length == 1) {
                    //判断是否有其他行正在编辑
                    if (editorRow == -1) {
                        //不让编辑用户名
                        //dataGridOper.datagrid('removeEditor', ['username','']); 传多个对象
                        dataGridOper.datagrid('removeEditor', 'username');
                        
                        //返回指定行的索引,row 参数可以是一个行记录或者一个 id 字段的值
                        var index1 = dataGridOper.datagrid('getRowIndex', rows2[0]);
                        operator = "updateData";
                        //在第一行增加
                        //队列进行编辑时必须在columns中列设置editor属性
                        //开始对一行进行编辑,参数index 索引
                        dataGridOper.datagrid('beginEdit', index1);
                        
                        editorRow = index1;
                    }
                    else {
                        $.messager.confirm('提示', '是否保存正在修改的数据', function(btn2){
                            //点击确定则保存,否则取消
                            if (btn2) {
                                dataGridOper.datagrid('endEdit', editorRow);
                                //设置当前无正在编辑的行
                                editorRow = -1;
                            }
                        });
                    }
                }
                else {
                    $.messager.alert('提示', '一次只能对一行进行编辑', 'warning');
                }
            }
        }, '-', {
            id: 'idSave',
            text: '保存',
            iconCls: 'icon-save',
            //disabled: true,
            handler: function(){
                //结束对第一行进行编辑,参数index 索引
                if (editorRow != -1) {
                    dataGridOper.datagrid('endEdit', editorRow);
                }
            }
        }, '-', {
            id: 'idCancle',
            text: '取消编辑',
            iconCls: 'icon-undo',
            //disabled: true,
            handler: function(){
                //获取总数
                var paper = dataGridOper.datagrid('getPager');
                var total = paper.pagination('options').total;
                //回滚自从创建以来或最后一次调用acceptChanges以来所有更改的数据
                dataGridOper.datagrid('rejectChanges');
                //重新设置总数
                paper.pagination({total:total});
                editorRow = -1;
                //取消选中时,则删除,修改按钮不可用
                $('#idDelete').linkbutton('disable');
                $('#idEdit').linkbutton('disable');
            }
        }, '-'],
        onSelect: function(rowIndex, rowData){
            //选中时,则删除,修改按钮可用
            $('#idDelete').linkbutton('enable');
            $('#idEdit').linkbutton('enable');
        },
        onSelectAll: function(rows){
            //选中时,则删除,修改按钮可用
            $('#idDelete').linkbutton('enable');
            $('#idEdit').linkbutton('enable');
        },
        onUnselect: function(rowIndex, rowData){
            //当取消全部选中时则按钮不可用
            var rows = dataGridOper.datagrid('getSelections');
            if (rows.length == 0) {
                //取消选中时,则删除,修改按钮不可用
                $('#idDelete').linkbutton('disable');
                $('#idEdit').linkbutton('disable');
            }
        },
        onUnselectAll: function(rows){
            //取消选中时,则删除,修改按钮不可用
            $('#idDelete').linkbutton('disable');
            $('#idEdit').linkbutton('disable');
        },
        onAfterEdit: function(rowIndex, rowData, changes){
            //获取最后一次提交以来更改的行,type 参数表示更改的行的类型,可能的值是:inserted、deleted、updated,等等。
            //dataGridOper.datagrid('getChanges', 'inserted');//用于判断是增删改的操作
            //当用户完成编辑一行时触发,参数包括rowIndex:编辑行的索引,从 0 开始
            //rowData:编辑行对应的记录 changes:更改的字段/值对
            var urlData = "";
            if (operator == "insertData") {
                urlData = "username=" + rowData.username + "&gender=" + rowData.gender + "&phone=" + rowData.phonenum;
            }
            else {
                urlData = "id=" + rowData.oid + "&gender=" + rowData.gender + "&phone=" + rowData.phonenum;
            }
            $.ajax({
                type: "POST",
                url: getRootPath() + '/operateDataGrid?operator=' + operator,
                data: urlData,
                dataType: 'text',
                success: function(msgResult){
                    //console.info(msgResult);
                    if (msgResult == "success") {
                        //提交自从被加载以来或最后一次调用acceptChanges以来所有更改的数据,
                        //保持该数据的状态,否则点击取消编辑,将会回到修改前的数据,相当于提交事务
                        dataGridOper.datagrid('acceptChanges');
                        //title, msg, icon, fn
                        $.messager.alert('系统提示', '保存成功', 'info', function(btn){
                            //回调函数
                            dataGridOper.datagrid('load');
                        });
                    }
                    else {
                        $.messager.alert('系统提示', '保存失败', 'error');
                        //回滚
                        dataGridOper.datagrid('rejectChanges');
                    }
                    editorRow = -1;
                },
                error: function(XMLHttpRequest, textStatus, errorThrown){
                    $.messager.alert('系统提示', '保存失败:' + textStatus, 'info')
                }
            });
            
        },
        onDblClickRow: function(rowIndex, rowData){
            //当用户双击一行时触发,参数包括,rowIndex:被双击行的索引,从 0 开始,rowData:被双击行对应的记录
            //双击行时进行编辑该行
            
            //控制一次只能编辑一行
            if (editorRow == -1) {
                operator = "updateData";
                //不让编辑用户名
                dataGridOper.datagrid('removeEditor', 'username');
                //在第一行增加
                //队列进行编辑时必须在columns中列设置editor属性
                //开始对一行进行编辑,参数index 索引
                dataGridOper.datagrid('beginEdit', rowIndex);
                editorRow = rowIndex;
            }
            else {
                $.messager.confirm('提示', '是否保存正在修改的数据', function(btn2){
                    //点击确定则保存,否则取消
                    if (btn2) {
                        dataGridOper.datagrid('endEdit', editorRow);
                        //设置当前无正在编辑的行
                        editorRow = -1;
                    }
                });
            }
        },
        onClickRow: function(rowIndex, rowData){
            //当用户点击一行时触发,参数包括: rowIndex:被点击行的索引,从0开始 rowData:被点击行对应的记录
            //判断是否有正在修改的数据
            if (editorRow != -1) {
                $.messager.confirm('提示', '是否保存正在修改的数据', function(btn2){
                    //点击确定则保存,否则取消
                    if (btn2) {
                        dataGridOper.datagrid('endEdit', editorRow);
                        //设置当前无正在编辑的行
                        editorRow = -1;
                    }
                });
            }
        },
        //当右键点击行时触发
        onRowContextMenu: function(e, rowIndex, rowData){
            //console.info(e);
            //阻止浏览器默认的右键事件
            e.preventDefault();
            rightIndex = rowIndex;
            //添加菜单
            $('#editMenu').menu('show', {
                left: e.pageX,
                top: e.pageY
            });
            
        }
        
    });
}

/**
 * 右键增加
 */
function addRow(){
    $('#idAdd').data().linkbutton.options.handler();
}

/**
 * 右键修改
 */
function editRow(){
    //取消选中当前页所有的行
    dataGridOper.datagrid('unselectAll');
    dataGridOper.datagrid('selectRow', rightIndex);
    
    $('#idEdit').data().linkbutton.options.handler();
}

/**
 * 右键删除
 */
function delRow(){
    //取消选中当前页所有的行
    dataGridOper.datagrid('unselectAll');
    dataGridOper.datagrid('selectRow', rightIndex);
    $('#idDelete').data().linkbutton.options.handler();
}







web.xml 代码

  <servlet>
    <servlet-name>OperateDataGridServlet</servlet-name>
    <servlet-class>com.OperateDataGridServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>OperateDataGridServlet</servlet-name>
    <url-pattern>/operateDataGrid</url-pattern>
  </servlet-mapping>
 


java后台 代码

servlet 代码

package com;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OperateDataGridServlet extends HttpServlet
{

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException
    {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException
    {
        String operator = request.getParameter("operator");
        if (null != operator)
        {
            DBBaseDao dao = new DBBaseDao();
            if ("selectData".equals(operator))
            {
                Map map = new HashMap();
                List list = new ArrayList();
                try
                {
                    String sqlCount = "select count(1) from userinfo u where u.enable_flag='T'";
                    ResultSet rss = dao.querySql(sqlCount);
                    int count = 0;
                    while (rss.next())
                    {
                        count = Integer.valueOf(rss.getString("count(1)"));
                    }
                    if (count > 0)
                    {
                        // 获取分页条件
                        String pageStr = request.getParameter("page");
                        String rowStr = request.getParameter("rows");
                        // 获取排序字段和类型
                        String sort = request.getParameter("sort");
                        String order = request.getParameter("order");

                        int page = 0;
                        int row = 0;
                        if (pageStr != "" && pageStr != null)
                        {
                            page = Integer.parseInt(pageStr);
                        }
                        if (rowStr != "" && rowStr != null)
                        {
                            row = Integer.parseInt(rowStr);
                        }
                        int start = (page - 1) * row;
                        int end = page * row;

                        String sqlStr = "select * from (select a.*, rownum m from "
                                + "(select u.oid,u.username,u.gender,u.phonenum from userinfo u"
                                + " where u.enable_flag='T' order by "
                                + sort
                                + "  "
                                + order
                                + ") a where rownum<="
                                + end
                                + " ) where m>"
                                + start;
                        ResultSet rs = dao.querySql(sqlStr);

                        UserInfo user = null;
                        while (rs.next())
                        {
                            user = new UserInfo();
                            user.setOid(rs.getString("oid"));
                            user.setUsername(rs.getString("username"));
                            user.setGender(rs.getString("gender"));
                            user.setPhonenum(rs.getString("phonenum"));
                            list.add(user);
                        }
                    }
                    // 设置总数
                    map.put("total", count);
                    // 设置行数据
                    map.put("rows", list);
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
                // response.getWriter().write(JsonUtil.list2json(list));
                response.getWriter().write( JsonUtil.map2json(map));
            }
            else if ("delData".equals(operator))
            {
                String ids = request.getParameter("ids");
                if(ids==null || "".equals(ids)){
                    response.getWriter().print("noData");
                }else{
                    String sql ="update userinfo u set u.enable_flag='T' where oid in("+ids+")";
                    int num = dao.updateSql(sql);
                    dao.closeAll();
                    if(num>0){
                        response.getWriter().print("success");
                    }else{
                        response.getWriter().print("failer");
                    }
                }
            }
            else if ("insertData".equals(operator))
            {
                String username = request.getParameter("username");
                String gender = request.getParameter("gender");
                String phone = request.getParameter("phone");
                String sql ="insert into userinfo(oid,enable_flag,username,gender,phonenum) values (userinfo_S.NEXTVAL,'T','"+username+"','"+gender+"','"+phone+"')";
                int num = dao.updateSql(sql);
                dao.closeAll();
                if(num>0){
                    response.getWriter().print("success");
                }else{
                    response.getWriter().print("failer");
                }
            }
            else if ("updateData".equals(operator))
            {
                String id = request.getParameter("id");
                String gender = request.getParameter("gender");
                String phone = request.getParameter("phone");
                String sql ="update userinfo u set u.gender='"+gender+"',phonenum='"+phone+"' where oid in("+id+")";
                int num = dao.updateSql(sql);
                dao.closeAll();
                if(num>0){
                    response.getWriter().print("success");
                }else{
                    response.getWriter().print("failer");
                }
            }
        }
    }
}


dao 层代码

package com;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 操作数据库
 *
 * @author kou
 */
public class DBBaseDao
{
    Connection conn = null;
    PreparedStatement pst = null;
    ResultSet rs = null;

//     public Connection getConnection()
//    {
//        try
//        {
//            Class.forName("oracle.jdbc.driver.OracleDriver");
//            conn = DriverManager.getConnection(
//                    "jdbc:oracle:thin:@127.0.0.1:1521:user", "admin",
//                    "admin");
//        }
//        catch (Exception e)
//        {
//            e.printStackTrace();
//        }
//
//        return conn;
//    }
    static
    {
        try
        {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }

    public DBBaseDao()
    {
        try
        {
            conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@127.0.0.1:1521:user", "admin",
                    "admin");
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    /**
     * 查询结果集
     *
     * @param sql
     * @return
     */
    public ResultSet querySql(String sql)
    {
        // conn = getConnection();
        try
        {
            pst = conn.prepareStatement(sql);
            rs = pst.executeQuery();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }

        return rs;
    }

    /**
     * 更新
     *
     * @param sql
     * @return
     */
    public int updateSql(String sql)
    {
        // conn = getConnection();
        int count = 0;
        try
        {
            pst = conn.prepareStatement(sql);
            count = pst.executeUpdate();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }

        return count;
    }

    /**
     * 关闭所有连接
     */
    public void closeAll()
    {

        try
        {
            if (conn != null || !conn.isClosed())
            {
                conn.close();
            }
            if (pst != null)
            {
                pst.close();
            }
            if (rs != null)
            {
                rs.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }

    }

}


实体类

package com;

public class UserInfo
{
    private String oid;
    private String username;
    private String gender;
    private String phonenum;
    public String getOid()
    {
        return oid;
    }
    public void setOid(String oid)
    {
        this.oid = oid;
    }
    public String getUsername()
    {
        return username;
    }
    public void setUsername(String username)
    {
        this.username = username;
    }
    public String getGender()
    {
        return gender;
    }
    public void setGender(String gender)
    {
        this.gender = gender;
    }
    public String getPhonenum()
    {
        return phonenum;
    }
    public void setPhonenum(String phonenum)
    {
        this.phonenum = phonenum;
    }

    
}


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值