• EasyUI的增删查改(后台ASP.NET)


    转自:http://www.cnblogs.com/dedeyi/archive/2013/04/22/3035057.html

    某某人曾经跟我说,你们做系统不就是增删查改吗。

    是啊,很多时候我们就是把用户的数据同后台数据库进行增删查改的沟通。

    但是,把CRUD(增删查改)做得好,可能也不是一件很简单的事,

    这里要展现的是我现在能写出来最好的Demo了,水平有限,小弟在校学生一枚,还请各位看客多多指教。

    Demo前台使用JQuery EasyUI 请求一般处理程序,一般处理程序调用BLL层方法,BLL==>DAL,一个简单三层的效果。

    项目结构如图:

    一、数据库表结构

        这里只创建一个UserInfo表,表中字段有:UserID,CardID,UPwd,UName,UAge,IsDel,AddDate

    二、后台处理CRUD

        后台处理添加、删除(软删除)、编辑、查询(分页)。其中查询包括:分页和搜索处理所有有点麻烦,

        1、先介绍数据访问层(DAL)中的方法

            这里是,添加、删除、编辑、分页查询的方法。

            前台查询的参数存储在NameValueCollection中,然后在DAL层中的PreSearchParameter方法中把查询参数装配到sql语句和SqlParameter中,

            在DAL层中获取的数据是DataTable,然后在BLL层中转换成JSON格式的数据传给EasyUI展示。

     

    using System;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using Dedeyi.Common;
    using System.Collections;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    
    namespace Dedeyi.ZSF.DAL
    {
       public class UserInfoDAL
        {
             /// <summary>
            /// 增加一条数据
            /// </summary>
            public int Add(Dedeyi.ZSF.Model.UserInfo model)
            {
                StringBuilder strSql=new StringBuilder();
                strSql.Append("insert into UserInfo(");
                strSql.Append("CardID,UPwd,UName,UAge,IsDel,AddDate)");
                strSql.Append(" values (");
                strSql.Append("@CardID,@UPwd,@UName,@UAge,@IsDel,@AddDate)");
                strSql.Append(";select @@IDENTITY");
                SqlParameter[] parameters = {
                        new SqlParameter("@CardID", SqlDbType.VarChar,16),
                        new SqlParameter("@UPwd", SqlDbType.VarChar,64),
                        new SqlParameter("@UName", SqlDbType.NVarChar,16),
                        new SqlParameter("@UAge", SqlDbType.Int,4),
                        new SqlParameter("@IsDel", SqlDbType.Bit,1),
                        new SqlParameter("@AddDate", SqlDbType.SmallDateTime)};
                parameters[0].Value = model.CardID;
                parameters[1].Value = model.UPwd;
                parameters[2].Value = model.UName;
                parameters[3].Value = model.UAge;
                parameters[4].Value = model.IsDel;
                parameters[5].Value = model.AddDate;
    
                object obj = SQLHelper.ExecuteScalar(strSql.ToString(),parameters);
                if (obj == null)
                {
                    return 0;
                }
                else
                {
                    return Convert.ToInt32(obj);
                }
            
           }
    
           /// <summary>
           /// 删除用户
           /// </summary>
           /// <param name="keyid"></param>
            public void Del(int keyid) 
            {
                //此处软删除
                string s = "update UserInfo set IsDel=1 where UserID="+keyid;
                SQLHelper.ExecuteNoneQuery(s,null);
            }
    
                ///<summary>
            ///更新一条数据
            ///</summary>
            public bool Update(Dedeyi.ZSF.Model.UserInfo model)
            {
                StringBuilder strSql = new StringBuilder();
    
                strSql.Append("update [UserInfo] set ");
                strSql.Append(" CardID=@CardID,");
                strSql.Append(" UPwd=@UPwd,");
                strSql.Append(" UName=@UName,");
                strSql.Append(" UAge=@UAge ");
                //strSql.Append(" IsDel=@IsDel,");
                //strSql.Append("AddDate=@AddDate");
                strSql.Append(" where UserID=@UserID");
    
                SqlParameter[] parameters = {
                    new SqlParameter("@UserID", SqlDbType.Int,4),
                    new SqlParameter("@CardID", SqlDbType.VarChar,16),
                    new SqlParameter("@UPwd", SqlDbType.VarChar,64),
                    new SqlParameter("@UName", SqlDbType.NVarChar,16),
                    new SqlParameter("@UAge", SqlDbType.Int,4),
                    //new SqlParameter("@IsDel", SqlDbType.Bit,1),
                    //new SqlParameter("@AddDate", SqlDbType.DateTime),
                };
                parameters[0].Value = model.UserID;
                parameters[1].Value = model.CardID;
                parameters[2].Value = model.UPwd;
                parameters[3].Value = model.UName;
                parameters[4].Value = model.UAge;
                //parameters[5].Value = model.IsDel;
                //parameters[6].Value = model.AddDate;
    
                int rows = SQLHelper.ExecuteNoneQuery(strSql.ToString(),parameters);
                if (rows > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
    
    
            //分页相关的
            #region 
            /// <summary>
            /// 获取条件查询数据行数
            /// </summary>
            /// <param name="nv">关键字,UName,UAge,在前台请求形成Hashtable作为参数时候要用到这个</param>
            /// <returns>数据行数</returns>
            public int GetSearchCount(NameValueCollection nv) 
            {
                string sc;
                SqlParameter[] ps;
                PreSearchParameter(nv, out sc, out ps);
    
                string sql = "select count(0) from UserInfo where " + sc;
    
                return Convert.ToInt32(SQLHelper.ExecuteScalar(sql, ps));
            } 
    
           /// <summary>
           /// 获取条件查询的分页数据
           /// </summary>
           /// <param name="index"></param>
           /// <param name="size"></param>
            /// <param name="nv">关键字,UName,UAge,在前台请求形成Hashtable作为参数时候要用到这个</param>
           /// <returns></returns>
            public DataTable GetSearchPage(int index, int size,NameValueCollection nv)
            {
                string f = "UserID,CardID,UPwd,UName,UAge,AddDate";
                string o = "AddDate DESC";
                return GetSearchePage(index,size,nv,f,o);
            }
           /// <summary>
           /// 获取分页数据
           /// </summary>
           /// <param name="index">当前页</param>
           /// <param name="size">每一页数据行数</param>
           /// <param name="ht">查询条件key是字段,value是对应的值</param>
           /// <param name="fieldList">要返回的字段</param>
           /// <param name="orderby">排序规则不要order by ,如 AddDate desc,userid asc</param>
           /// <returns></returns>
            private DataTable GetSearchePage(int index, int size, NameValueCollection nv, string fieldList,string orderby) 
            {
                string sc ; //过滤条件
                SqlParameter[] ps;
                PreSearchParameter(nv,out sc,out ps);
    
                string sql = "select * from (select {0},ROW_NUMBER() over(order by {1}) as num from UserInfo where {2}) as tb";
                sql += " where num between {3} and {4}";
    
                sql = string.Format(sql, fieldList, orderby, sc, (index - 1) * size + 1, index * size);
    
                return SQLHelper.GetDataTable(sql, ps);
            }
    
           /// <summary>
           /// 把查询参数转换为sql,和SqlParameter
           /// </summary>
            /// <param name="ht">关键字,UName,UAge,在前台请求形成Hashtable作为参数时候要用到这个</param>
           /// <param name="sql"></param>
           /// <param name="paras"></param>
            private void PreSearchParameter(NameValueCollection nv, out string sql, out SqlParameter[] paras)
            {
                sql = " '1'='1' and IsDel=0";
                List<SqlParameter> list = new List<SqlParameter>();
                if (!string.IsNullOrEmpty(nv["UName"]))
                {
                    sql += " and UName like @UName";
                    list.Add(new SqlParameter("@UName", "%" + nv["UName"] + "%"));
                }
    
                int tAge;
                if (int.TryParse(nv["UAge"],out tAge))
                {
                    sql += " and UAge=" + nv["UAge"];
                }
                paras = list.ToArray();
            }
    
            #endregion
        }
    }
    View Code

        2、然后在业务逻辑层,做一些逻辑处理(JSON格式转换、添加预设值)

    using Dedeyi.ZSF.DAL;
    using Dedeyi.ZSF.Model;
    using Dedeyi.Common;
    using System;
    using System.Collections.Specialized;
    
    namespace Dedeyi.ZSF.BLL
    {
       public class UserInfoBLL
        {
            UserInfoDAL dal=new UserInfoDAL();
    
           /// <summary>
           /// 添加
           /// </summary>
           /// <param name="user"></param>
           /// <returns></returns>
           public int Add(UserInfo user) 
           {
               user.AddDate = DateTime.Now;
               user.IsDel = false;
               
               return dal.Add(user);
           }
    
            /// <summary>
           /// 删除用户
           /// </summary>
           /// <param name="keyid"></param>
           public void Del(int keyid) 
           {
                dal.Del(keyid);
           }
    
              ///<summary>
            ///更新一条数据
            ///</summary>
           public bool Update(Dedeyi.ZSF.Model.UserInfo model) 
           {
               return dal.Update(model);
           }
    
           //分页相关的
            #region 
            /// <summary>
            /// 获取条件查询数据行数
            /// </summary>
            /// <param name="ht">关键字,UName,UAge,在前台请求形成Hashtable作为参数时候要用到这个</param>
            /// <returns>数据行数</returns>
           public int GetSearchCount(NameValueCollection ht) 
           {
               return dal.GetSearchCount(ht);
           }
    
           /// <summary>
           /// 获取条件查询的分页数据
           /// </summary>
           /// <param name="index"></param>
           /// <param name="size"></param>
            /// <param name="ht">关键字,UName,UAge,在前台请求形成Hashtable作为参数时候要用到这个</param>
           /// <returns>json格式的数据集</returns>
           public string GetSearchPage(int index, int size,NameValueCollection ht)
           {
               return JSONHelper.DataTableToJson(dal.GetSearchPage(index,size,ht));
           }
    
            #endregion
    
        }
    }
    View Code

        3、界面层的一般处理程序,处理一般请求

    using System.Web;
    using Dedeyi.Common;
    using Dedeyi.ZSF.Model;
    using Dedeyi.ZSF.BLL;
    using System;
    
    namespace WebApp.Handler
    {
        /// <summary>
        /// UserHandler 的摘要说明
        /// </summary>
        public class UserHandler : IHttpHandler,System.Web.SessionState.IRequiresSessionState
        {
            private HttpContext context;
            private UserInfoBLL bll =new UserInfoBLL();
    
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
    
                //权限检查
                //
                try
                {
                    string sType = context.Request["reqTypes"];
                    if (string.IsNullOrEmpty(sType))
                    {
                        context.Response.Write("参数错误");
                        return;
                    }
                    this.context = context;
    
                    switch (sType.ToLower())
                    {
                        case "add":
                            Add();
                            break;
                        case "del":
                            Del();
                            break;
                        case "update":
                            Update();
                            break;
                        case "search":
                            Search();
                            break;
    
                    }
                }
                catch (Exception ex) 
                {
                    context.Response.Write(new ReqMsg(false,ex.Message.ToString()));
                }
            }
            /// <summary>
            /// 获取用户ID
            /// </summary>
            /// <returns></returns>
            private int GetUserID() 
            {
                string s = context.Request["uid"];
                return StringHelper.GetInt(s);
            }
    
            /// <summary>
            /// 添加方法
            /// </summary>
            private void Add() 
            {
                UserInfo user=new UserInfo();
                int n= RequestHelper.FormToModel<UserInfo>(user,context.Request.Form);
                ReqMsg msg = new ReqMsg();
                
                msg.Success=n>2?bll.Add(user)>0:false;
    
                context.Response.Write(msg.ToString());
    
            }
    
            /// <summary>
            /// 更新
            /// </summary>
            private void Update() 
            {
                UserInfo user = new UserInfo();
                int n = RequestHelper.FormToModel<UserInfo>(user, context.Request.Form);
                ReqMsg msg = new ReqMsg();
    
                msg.Success = n > 2 ? bll.Update(user) : false;
    
                context.Response.Write(msg.ToString());
            }
    
            /// <summary>
            /// 删除
            /// </summary>
            private void Del() 
            {
                int i = GetUserID();
                bll.Del(i);
                ReqMsg msg = new ReqMsg(true, "ok");
                context.Response.Write(msg.ToString());
            }
            /// <summary>
            /// 查询
            /// </summary>
            private void Search() 
            {
                int index = StringHelper.GetInt(context.Request["page"], 1);
                int page = StringHelper.GetInt(context.Request["rows"], 10);
    
                string s = bll.GetSearchPage(index,page,context.Request.Form);
                int t = bll.GetSearchCount(context.Request.Form);
    
                context.Response.Write(RequestHelper.ResponseGridJSON(s,t));
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
    View Code

    三、EasyUI前台展示

        前台方法主要是AJAX处理增删查改请求,创建工具菜单(可能工具权限显示部分但此次不考虑),

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApp.Default" %>
    
    <!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 href="Scripts/EasyUI/themes/icon.css" rel="stylesheet" type="text/css" />
        <link href="Scripts/EasyUI/themes/default/easyui.css" rel="stylesheet" type="text/css" />
        <script src="Scripts/EasyUI/jquery-1.8.0.min.js" type="text/javascript"></script>
        <script src="Scripts/EasyUI/jquery.easyui.min.js" type="text/javascript"></script>
        <script src="Scripts/EasyUI/easyui-lang-zh_CN.js" type="text/javascript"></script>
        <script src="Scripts/Common.js" type="text/javascript"></script>
    
        <script type="text/javascript">
            var actionURL="handler/UserHandler.ashx";
            var CRUD =
            {
                Init: function () {
                    $('#dataTB').datagrid(
                     {
                         title: '用户列表',
                         iconCls: 'icon-reload',
                          800,
                         //height: size.height,
                         nowrap: false,
                         collapsible: false,
                         url: actionURL,
                         loadMsg: '正在加载……',
                         singleSelect: true,
                         striped: true,
                         pagesize: 10,
                         pagination: true,
                         queryParams: convertArray($('#fmSearch').serializeArray()),
                         toolbar: CreateToolBar(),
    
                         columns: [[
                            { title: '编号', field: 'UserID',  80, align: 'center' },
                            { title: '卡号', field: 'CardID',  100, align: 'center' },
                            { title: '姓名', field: 'UName',  160, align: 'center' },
                            { title: '密码', field: 'UPwd',  160, align: 'center' },
                            { title: '年龄', field: 'UAge',  50, align: 'center' },
                            { title: '添加时间', field: 'AddDate',  150,
                                formatter: function (val, rec) {
                                    return ChangeDateFormat(val);
                                }
    
                            }
                         ]]
                     });
                },
                Add: function () {
                    $('#dialogAdd').dialog('open');
                    $('#txt_editType').val('add'); //标示为添加
                },
                Del: function () {
                    var r = $('#dataTB').datagrid('getSelected');
                    if (r) {
                        $.messager.confirm('删除提示', '你确认删除这一条数据吗?', function (d) {
                            if (d) {
                                $.post(actionURL, { "reqTypes": "del", "uid": r["UserID"] }, function (d) {
                                    var res = $.parseJSON(d);
                                    if (res.Success) {
                                        $.messager.show(
                                        {
                                            title: '系统提示',
                                            msg: '删除成功!',
                                            timeout: 1500
                                        });
                                        $('#dataTB').datagrid('reload', convertArray($('#fmSearch').serializeArray()));
                                    } else {
                                        $.messager.alert('错误', res.Msg);
                                    }
                                });
                            }
                        });
                    } else {
                        $.messager.alert('提示', '请选择一行数据!');
                    }
    
                },
                Update: function () {
                    var r = $('#dataTB').datagrid('getSelected');
                    if (r == null) { $.messager.alert('提示', '请选择一行数据'); return; };
                    $('#dialogAdd').dialog('open');
                    $('#fmAdd').form('load', r);
                    $('#txt_editType').val('update');
                }
            };
    
            function InitForm() {
                $('#dialogAdd').dialog(
                {
                    closed: true,
                    title:'添加用户',
                    300,
                    height:300
                });
             }
    
            function CreateToolBar() {
                var a = [];
                var isReflesh = true;
                var isAdd = true;
                var isDel = true;
                var isUpdate = true;
                if (isReflesh) {
                    a.push({
                        text: '刷新',
                        iconCls: 'icon-reload',
                        handler: function () {
    
                            CRUD.Init();
                        }
                    });
    
                    a.push('-');
    
                }
    
                if (isAdd) {
                    a.push({
                        text: '添加',
                        iconCls: 'icon-add',
                        handler: function () {
                            CRUD.Add();
                        }
                    });
    
                    a.push('-');
                }
    
                if (isUpdate) {
                    a.push({
                        text: '编辑',
                        iconCls: 'icon-edit',
                        handler: function () {
                            CRUD.Update();
                        }
                    });
    
                    a.push('-');
                }
    
                if (isDel) {
                    a.push({
                        text: '删除',
                        iconCls: 'icon-cut',
                        handler: function () {
    
                            CRUD.Del();
                        }
                    });
    
                    a.push('-');
                }
                return a;
             }
        </script>
        <script type="text/javascript">
    
            $(function () {
    
                CRUD.Init();
    
                InitForm();
    
                //查询事件
                $('#a_search').click(function () {
                    $('#dataTB').datagrid('reload', convertArray($('#fmSearch').serializeArray()));
    
                });
                //确定添加
                $('#a_AddOK').click(function () {
                    if ($('#fmAdd').form('validate')) {
                        var send = convertArray($("#fmAdd").serializeArray());
                        $.post(actionURL, send, function (d) {
                            $('#dataTB').datagrid('reload', convertArray($('#fmSearch').serializeArray()));
                            var res = $.parseJSON(d);
                            if (res.Success) {
                                $.messager.alert('提示', '操作成功');
                                $('#fmAdd').form('clear');
                            } else {
                                $.messager.alert('错误', res.Msg);
                            }
                        });
                    }
    
                });
    
                //取消
                $('#a_AddCancle').click(function () {
                    $('#fmAdd').form('clear');
                    $('#dialogAdd').dialog('close');
    
                })
    
            });    
        </script>
    
    </head>
    <body>
    <div id="dialogAdd" >
        <form id="fmAdd" style="text-align:center;">
            <br /><br />
             <input type="hidden" name="reqTypes" id="txt_editType" />
             <input type="hidden" name="UserID" id="txt_editID"/>
             用户名<input type="text" name="UName" required="true" class="easyui-validatebox" /><br /><br />
            卡号<input type="text" name="CardID" /><br /><br />
            年龄<input type="text" name="UAge" /><br /><br />
            密码<input type="text" name="UPwd" /><br /><br />
            <a class="easyui-linkbutton" id="a_AddOK">确定</a>
            <a class="easyui-linkbutton" id="a_AddCancle">取消</a>
        </form>
    </div>
        <div>
            <form id="fmSearch">
                <input type="hidden" name="reqTypes" value="search" />
                用户名<input type="text" name="UName" />
                年龄<input type="text" name="UAge" />
                <a class="easyui-linkbutton" id="a_search">查询</a>
            </form>
        </div>
       <table id="dataTB"></table>
    </body>
    </html>
    View Code

    最终显示效果如图:

    JS帮助函数:

    function ChangeShortDateFormat(cellval) {
        if (!cellval) return '';
        var date = new Date(parseInt(cellval.replace("/Date(", "").replace(")/", ""), 10));
        var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
        var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
        var hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
        var minu = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
        var sec = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
    
        return date.getFullYear() + "-" + month + "-" + currentDate; //+ " " + hour + ":" + minu + ":" + sec;
    
    }
    
    //表单序列化有转JSON格式
    function convertArray(o) {
        var v = {};
        for (var i in o) {
            if (o[i].name != '__VIEWSTATE') {
                if (typeof (v[o[i].name]) == 'undefined')
                    v[o[i].name] = o[i].value;
                else
                    v[o[i].name] += "," + o[i].value;
            }
        }
        return v;
    }
    View Code

    ********谢谢支持,感谢批评建议,努力学习中******************************

    Demo 的 下载链接

  • 相关阅读:
    使用Dictionary键值对判断字符串中字符出现次数
    Linq实现字符串拼接多条件查询
    js数据类型转换
    js前端数据类型检测typeof,instanceof,Object.prototype.toString.call
    moment.js格式化日期,获取前一个月的时间
    css 样式中height100%失效问题
    记一次react项目运行崩溃
    null和undefined区别
    windows腾讯云/阿里云服务器更换操作系统为linux
    csrf攻击原理和防御-生成token防御代码
  • 原文地址:https://www.cnblogs.com/cugwx/p/3575280.html
Copyright © 2020-2023  润新知