转自: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',width: 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', width: 80, align: 'center' },{ title: '卡号', field: 'CardID', width: 100, align: 'center' },{ title: '姓名', field: 'UName', width: 160, align: 'center' },{ title: '密码', field: 'UPwd', width: 160, align: 'center' },{ title: '年龄', field: 'UAge', width: 50, align: 'center' },{ title: '添加时间', field: 'AddDate', width: 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:'添加用户',width: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;elsev[o[i].name] += "," + o[i].value;}}return v;
}

View Code

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

Demo 的 下载链接

转载于:https://www.cnblogs.com/cugwx/p/3575280.html

EasyUI的增删查改(后台ASP.NET)相关推荐

  1. Access+Vs 数据库增删查改——使用Asp.net的sqldatasource控件,根据如下Universtiy.mdb数据库,处理学生注册选课与授课老师的工作

    Access+Vs 数据库增删查改--使用Asp.net的sqldatasource控件,根据如下Universtiy.mdb数据库,处理学生注册选课与授课老师的工作 文章目录 Access+Vs 数 ...

  2. ASP.NET两个关联的表的增删查改

    两个关联的表的增删查改 主要用了参数 SqlParameter,事务执行多条sql 表Users ID         int Name   varchar 表UsersDetail ID       ...

  3. 【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Table表格增删查改、Pagination分页、搜索框

    文章目录 目标 代码 0.结构 1.按钮-删除 2.按钮-编辑 3.debug 4.样式 5.分页Pagination:功能 6.分页Pagination:样式 7.搜索框:功能 8.搜索框:样式 总 ...

  4. 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  5. 只需一行代码实现增删查改,微软已经让我们很简单。谈AccessDataSource的使用。...

    这是一个很简单的内容.日常我们总腻烦做增删查改这样的重复性的劳动,如果你的项目不是太大,如果你的团队很小,或许就是你一个人,那么就完全可以参考以下这样简单的方式.微软已经给我们做了.我们只要写一行代码 ...

  6. JAVA原生mvc实现用户信息的增删查改

    笔者最近学完jsp和servlet,于是心血来潮的打算写个简单的用户案例 环境准备: 开发工具eclipse jdk-1.8.0_72 tomcat-9.0.5 前端部分: 1.自己手写了一套样式 2 ...

  7. 初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器

    1 设计目的 <Web应用开发课程设计>是实践性教学环节之一,是<Web程序设计>课程的辅助教学课程.通过课程设计,使学生掌握Web网站的基本概念,结合实际的操作和设计,巩固课 ...

  8. backbonejs mvc框架的增删查改实例

    一:开发环境 coffeescript和nodejs需要先安装,没装网上自己查安装步骤. 代码编写环境及esp框架下载: esp框架下载地址:https://github.com/nonocast/e ...

  9. axios 的简单增删查改 使用json-server启动的josn

    使用axios 获取json-server启动的json数据 进行增删查改 一.启动json-server 1.1启动 json-server是用来模仿后台接口而使用的. 安装:npm install ...

  10. 【超详细Django网站开发过程7】便利店管理系统之——利用管理员用户对客户数据进行增删查改

    提到数据库,就免不了对信息的增删查改,今天来做一个管理员用户对顾客数据的增删查改功能. 导航 1.增删查改中的--"查"操作如下: 2.增删查改中的--"增"操 ...

最新文章

  1. YOLOV5的多主干网络backbone实现(Mobilenetv3Small、EagleEye、EfficientNetLite-0、PP-LCNet-1x、SwinTrans-YOLOv5等)
  2. 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入
  3. Android技能树 — 树基础知识小结(一)
  4. android 修改菜单大小,如何在NavigationView中更改菜单项图标的大小?
  5. .NET Core 3.0预览版7中的ASP.NET Core和Blazor更新
  6. 正则表达式:去掉数字(整数、小数)前面多余的零
  7. 求你了,别再说Java对象都是在堆内存上分配空间的了!
  8. Nginx服务器之负载均衡策略(6种)
  9. MSP430杂谈--AD7793硬件SPI驱动与模拟SPI驱动
  10. 波卡生态DeFi项目Stone将于3月31日在DODO平台创建DVM流动性池并开启交易
  11. python数字类型及运算_Python基础教程:运算符以及数据类型解析
  12. Redhat使用yum install时提示This system is not registered with an entitlement server 的解决办法
  13. laravel-admin模型表格和详情展示关联数据
  14. 爱荷华州立大学计算机科学,爱荷华州立计算机科学庆祝成立50周年
  15. Oracle 各备份恢复环境下 SCN
  16. 从华为智慧生活APP的智能场景,谈到建成华为专属的智慧生活管理后台
  17. windows平台简单的FTP服务器,无需安装
  18. 网站收录查询-批量网站收录查询软件
  19. 服务器安装安卓模拟器_雷电模拟器、夜神模拟器、MUMU、逍遥、蓝叠和腾讯手游助手大对比...
  20. Apache BookKeeper

热门文章

  1. Mac鼠标增强软件Bettertouchtool
  2. Photo Size Changer三步压缩太大的jpg照片
  3. 一些没啥意思的出题想法记录
  4. 01数据结构——绪论
  5. Hadoop生态圈-Flume的组件之自定义Sink
  6. EVENT:10228 trace application of redo by kcocbk
  7. 运维人员如何学好shell脚本编程
  8. vuex使用及自定义Vue指令vue-permission
  9. 字节跳动教育部分开始裁员,N+2赔付...一大波读者失业
  10. Java 8 中的 Map 骚操作,学习下