Asp.Net+Easyui实现基本的CRUD

话说今天周四,本该给自己放个假,好好休息休息,但无奈自己对IT实在是痴迷,心甘情愿的想加加班把目标功能实现,功夫不负有心人,经过6个小时的鏖战,我终于成功了。在此和大家分享下成果,希望大家给个赞。

我的目标效果:在页面加载时,table表显示后台数据表中的学生的信息;点击添加按钮,出现弹框,可以添加学生信息;选中某一学生记录后,点击修改按钮,出现弹框,可以对学生信息进行修改;选中某一学生记录后,点击删除按钮,便可删除该学生信息。效果图如下所示:

目标效果有了,说说实现思路吧。

1.需要引入Easyui类库和相关的js:

<head>
    <title></title>
    <link href="css/easyui.css" rel="stylesheet" type="text/css" />
    <link href="css/icon.css" rel="stylesheet" type="text/css" />
    <link href="css/demo.css" rel="stylesheet" type="text/css" />
    <script src="js/jquery.min.js" type="text/javascript"></script>
    <script src="js/jquery.easyui.min.js" type="text/javascript"></script>
    <script src="js/test.js" type="text/javascript"></script>
</head>

2.画出显示数据的table表

//用于传递用户需要执行的操作
<input id="test" name="test"  type="hidden">
   <!--表格显示区-->
    <table id="tt" " title="管理学生信息" class="easyui-datagrid" style="width: auto; height: 400px;" idfield="itemid" pagination="true" iconcls="icon-save" remoteSort="false" data-options="rownumbers:true,
        url:'JSONData.ashx/ProcessRequest',pageSize:5,pageList:[5,10,15,20],
        method:'get',toolbar:'#tb' ," fitcolumns= "true" striped="true" singleselect="true">
        <thead>
            <tr>
               <th  data-options="field:'serial',width:0" hidden="hidden"> 序号</th>
               <th  data-options="field:'id',width:100",sortable:"true">学号</th>
               <th  data-options="field:'name',width:100",sortable:"true">姓名</th>
            </tr>
        </thead>
    </table>

3.画出添加、修改、删除三个按钮

 <!--添加、修改、删除按钮-->
    <div id="tb">
        <a href="javascript:void(0)" class="easyui-linkbutton" iconcls="icon-add" plain="true" onclick="newUser()">添加学生</a>
        <a href="javascript:void(0)" class="easyui-linkbutton"  iconcls="icon-edit" plain="true" onclick="editUser()">修改学生</a>
         <a href="javascript:void(0)" class="easyui-linkbutton" iconcls="icon-remove" plain="true" onclick="destroyUser()">删除学生</a>
    </div>

4.画出点击添加、修改按钮后出现的弹框

<!--弹框-->
    <div id="dlg" class="easyui-dialog" style="width: 400px; height: 280px; padding: 10px 20px"
        closed="true" buttons="#dlg-buttons">
        <div class="ftitle">
            User Information</div>
        <form id="fm" method="post" novalidate>
        <div class="fitem">
            <label>学号:</label>
            <input id="id" class="easyui-validatebox" required="true">
        </div>
        <div class="fitem">
            <label>姓名:</label>
            <input id="name" class="easyui-validatebox" required="true">
        </div>
        </form>
    </div>

到此页面的显示部分完成,下面需要用Ajax建立Web页面和一般处理程序之间的交互

var url = "JSONData.ashx / ProcessRequest ";
//打开添加学生弹框
function newUser() {
    $('#dlg').dialog('open').dialog('setTitle', '添加学生'); //设定表头
    $('#fm').form('clear'); //清空窗体数据
    document.getElementById("test").value = "add"; //设定表示为后台调不同方法数据提供接口
}
//打开修改学生弹框
function editUser() {
    $('#fm').form('clear');
    var row = $('#tt').datagrid('getSelected');
    if (row) {
        $('#dlg').dialog('open').dialog('setTitle', '修改学生');
        //绑定数据列表
        $('#id').val(row.id);
        $('#name').val(row.name);
        document.getElementById("test").value = "modify"; //设定表示为后台调不同方法数据提供接口
        $('#fm').form('load', row);
    }
}
//保存信息
function saveUser() {
    //获取页面中输入的值
    var serial;
    var id = document.getElementById("id").value;
    var name = document.getElementById("name").value;
    var test = document.getElementById("test").value;
    var row = $('#tt').datagrid('getSelected');

    if (test == "modify") {
        serial = row.serial;
    } else {
    serial == "";
    }

    $('#fm').form('submit', {
        //设定地址与传递参数到后台
        url: "JSONData.ashx?id=" + id + "&name=" + name + "&test=" + test + "&serial=" + serial,
        onSubmit: function () {
            return $(this).form('validate');
        },
        //判断结果是否正确
        success: function (result) {
            if (result.indexOf("T") == 0) {

                alert('恭喜您,信息保存成功!')
                $('#dlg').dialog('close');      // 关闭窗口
                $('#tt').datagrid('reload');
            }
            else {
                alert('保存失败,请您核对!')
            }
            var result = eval('(' + result + ')');
            if (result.success) {
                $('#dlg').dialog('close');      // close the dialog
                $('#tt').datagrid('reload');
                $.message.alert('提示', '保存成功!', 'info');

                // reload the user data
            } else {
                //$.messager.show({
                //    title: 'Error',
                //    msg: result.msg
                //});
            }
        }
    });
}
//删除学生
function destroyUser() {
    document.getElementById("test").value = "delete"; //设定表示为后台调不同方法数据提供接口
    var test = document.getElementById("test").value;
    var row = $('#tt').datagrid('getSelected');
    if (row) {
        $.messager.confirm('提示', '你确定要删除这条信息吗?', function (r) {
            if (r) {
                $('#fm').form('submit', {
                    url: "JSONData.ashx?serial=" + row.serial + "&test=" + test,
                    onSubmit: function () {
                    },
                    //判断结果是否正确
                    success: function (result) {
                        if (result.indexOf("T") == 0) {
                            $('#dlg').dialog('close');
                            alert('恭喜您,信息删除成功!')
                            $('#tt').datagrid('reload');
                        }
                        else {
                            alert('添加失败,请重新操作!')
                        }
                        var result = eval('(' + result + ')');
                    }
                });
            }
        });
    }
}

通过JS代码,我们可以发现,Ajax获取用户的数据,将其提交到一般处理程序JSONData.ashx中进行处理,并用回调函数获取一般处理程序的执行结果,JSONData.ashx代码如下:

  StudentDAL studentDAL = new StudentDAL();
        public void ProcessRequest(HttpContext context)//context中包含前台与后台来回传递的值
        {
            //判断前台请求的是增删改查的哪一个
            string command = context.Request.QueryString["test"];//前台传的标示值
            if (command == "add")
            {
                //调用添加方法
                Add(context);
            }
            else if (command == "delete")
            {//调用删除方法
                Delete(context);
            }
            else if (command == "modify")
            {//调用修改方法
                Modify(context);
            }
            else
            {//调用查询方法
                Query(context);
            }
        }

        #region 添加记录
        /// <summary>
        /// 添加记录
        /// </summary>
        /// <param name="context"></param>
        public void Add(HttpContext context)
        {
            StudentEntity student = new StudentEntity();
            student.id = context.Server.UrlDecode(context.Request.QueryString["id"]);
            student.name = context.Server.UrlDecode(context.Request.QueryString["name"]);
            try
            {
                if (studentDAL.Add(student))
                {
                    context.Response.Write("T");
                }
                else
                {
                    context.Response.Write("F");
                }
            }
            catch (Exception ex)
            {

            }
        }
        #endregion

        #region 修改记录
        /// <summary>
        /// 修改记录
        /// </summary>
        /// <param name="context"></param>
        public void Modify(HttpContext context)
        {
            StudentEntity student = new StudentEntity();
            student.serial = context.Server.UrlDecode(context.Request.QueryString["serial"]);
            student.id = context.Server.UrlDecode(context.Request.QueryString["id"]);
            student.name = context.Server.UrlDecode(context.Request.QueryString["name"]);
            try
            {
                if (studentDAL.Update(student))
                {
                    context.Response.Write("T");
                }
                else
                {
                    context.Response.Write("F");
                }
            }
            catch (Exception ex)
            {

            }
        }
        #endregion

        #region 删除记录
        /// <summary>
        /// 删除记录
        /// </summary>
        /// <param name="context"></param>
        public void Delete(HttpContext context)
        {
            StudentEntity student = new StudentEntity();
            student.serial = context.Server.UrlDecode(context.Request.QueryString["serial"]);
            try
            {
                if (studentDAL.Delete(student))
                {
                    context.Response.Write("T");
                }
                else
                {
                    context.Response.Write("F");
                }
            }
            catch (Exception ex)
            {

            }
        }
        #endregion

        #region 查询记录
        /// <summary>
        ///  查询记录
        /// </summary>
        /// <param name="context"></param>
        public void Query(HttpContext context)
        {

            context.Response.ContentType = "text/plain";

            //调用分页的GetList方法
            DataSet ds = studentDAL.Query();

            string strJson = ToJson.Dataset2Json(ds, -1);//DataSet数据转化为Json数据
            context.Response.Write(strJson);//返回给前台页面
            context.Response.End();

        }
        #endregion

在将数据表中的数据绑定到页面中的table时,由于后台返回的结果是DataSet或DataTable类型,所以需要一个方法将DataSet或DataTable转换为JSON类型,强大的ToJson类就完成了上述任务:

public class ToJson
    {

        #region DataSet转换成Json格式
        /// <summary>
        /// DataSet转换成Json格式
        /// </summary>
        /// <param name="ds">DataSet</param>
        /// <returns></returns>
        public static string Dataset2Json(DataSet ds, int total = -1)
        {
            StringBuilder json = new StringBuilder();

            foreach (DataTable dt in ds.Tables)
            {
                //{"total":5,"rows":[
                json.Append("{\"total\":");
                if (total == -1)
                {
                    json.Append(dt.Rows.Count);
                }
                else
                {
                    json.Append(total);
                }
                json.Append(",\"rows\":[");
                json.Append(DataTable2Json(dt));
                json.Append("]}");
            } return json.ToString();
        }
        #endregion

        #region dataTable转换成Json格式
        /// <summary>
        /// dataTable转换成Json格式
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static string DataTable2Json(DataTable dt)
        {
            StringBuilder jsonBuilder = new StringBuilder();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                jsonBuilder.Append("{");
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    jsonBuilder.Append("\"");
                    jsonBuilder.Append(dt.Columns[j].ColumnName);
                    jsonBuilder.Append("\":\"");
                    jsonBuilder.Append(dt.Rows[i][j].ToString());
                    jsonBuilder.Append("\",");
                }
                if (dt.Columns.Count > 0)
                {
                    jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                }
                jsonBuilder.Append("},");
            }
            if (dt.Rows.Count > 0)
            {
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
            }

            return jsonBuilder.ToString();
        }
        #endregion dataTable转换成Json格式
    }

至此,核心代码都已经实现,剩下的就是一个学生实体--StudentEntity,一个访问T_Student表的StudentDAL类,它们和我们平时访问数据库的方法一样,在此不再赘述。

这样,我们轻松的完成了对数据表T_Studnet进行CRUD的操作。基本功能虽然已经实现,但Easyui的好多扩展功能还需继续了解,比如在数据显示时,可以设置每页有多少条数据,数据按什么方式进行排序、组合查询等功能。

这个Demo大大增加了我学习Easyui的信心,本以为得一周才能完成的功能,没想到两天搞定,小小得瑟一下。和Easyui类似的还有extjs,它们都能画出很妙的页面图,只不过Easyui是JQuery的框架,extjs是Ajax的框架。

如果大家想练练手,可以把我做好的Demo下载下来,看看我的代码有什么不知之处,欢迎大神拍砖,源码下载地址:http://pan.baidu.com/s/1o6Cz4Qe。

好了,今天先到这吧,韩义打电话来让我们回家包饺子去了,关于Easyui的学习,咱们改日再谈。

Asp.Net+Easyui实现基本的CRUD

时间: 2024-10-13 14:50:48

Asp.Net+Easyui实现基本的CRUD的相关文章

一步一步搭框架(asp.netmvc+easyui+sqlserver)-03

一步一步搭框架(asp.netmvc+easyui+sqlserver)-03 我们期望简洁的后台代码,如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using formula; using System.Data; namespace demo.Areas.basic.Controllers { public class

基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)

http://blog.csdn.net/jiuqiyuliang/article/details/19967031 目录: 基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一) 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二) 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现添加.编辑.删除(三) 基于asp.net + easyui框架,一步步学习e

一步一步搭框架(asp.netmvc+easyui+sqlserver)-01

一步一步搭框架(asp.netmvc+easyui+sqlserver)-01 要搭建的框架是企业级开发框架,适用用企业管理信息系统的开发,如:OA.HR等 1.框架名称:sampleFrame. 2.搭建原则:最少知识原则. 3.先定义一个简单的编码规范:除类名和接口名外,其余首字母小写. 4.准备开发环境:vs2010及以上(mvc4).sqlserver.jquery2.0和easyui1.4.5 环境准备比较难于说明,上代码:http://files.cnblogs.com/files/

Silverlight 2 (beta1)数据操作(2)——使用ASP.NET Web Service进行数据CRUD操作(下)

前台界面 后台代码 //按钮事件 void saveButton_Click(object sender, RoutedEventArgs e) { if (userName.Text.Trim() == string.Empty) { errMessage.Foreground = new SolidColorBrush(Colors.Red); errMessage.Text = "请输入用户名称!"; errMessage.Visibility = Visibility.Visi

Silverlight 2 (beta1)数据操作(1)——使用ASP.NET Web Service进行数据CRUD操作(上)

目录 导言 软件需求 在SQL 2005中创建数据库 在Visual Studio 2008中创建 Silverlight 2 (beta1)工程 在ASP.NET工程里创建Web Service 在Silverlight 2 (beta1)工程中引用ASP.NET Web Service 添加数据部分 查询数据部分 修改数据部分 删除数据部分 整合程序 结语 例子下载 导言 Silverlight 2支持JSON.Web Service.WCF以及Sockets等新特性对数据CRUD操作,这个

ASP.NET Core Web API Cassandra CRUD 操作

在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将使用 Postman 来完成. ASP.NET Core 是 ASP.NET 的重大的重构,ASP.NET Core 是一个全新的开源和跨平台的框架,用于构建如 Web 应用.物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序. ASP.NET Core 已经内置了用 MVC 架

毕业设计 ASP.Net+EasyUI开发 X X露天矿调度管理信息系统(二)

这是本毕业设计的雏形和框架,实现的功能在左侧的功能框导航菜单内.  做的太烂,还是把学校名字给马赛克掉吧....省的挨校友批 登陆界面.. <cookie +ispostback实现记住我功能>/实现验证码校验 点击可以更改验证码 系统三用ASP.net 三层架构,jquery easyui 前台展示 所有后台交互均用jquery ajax进行. 整个页面看起来还是很清爽的.=.=.= 实现的主要功能: 今天要解决的一个问题是JQuery Easyui  中验证框 validatebox 没有

struts2 easyui实现datagrid的crud

最近两天因为项目需要,接触了easyui,要用它的datagrid实现crud.第一次做,花了一天时间才完成所有功能,昨天做另外一个模块,同样的功能只用了两个小时. 现在把第一次做datagrid时遇到的问题记录下来,帮助自己记忆.同时也帮助其他第一次接触easyui的朋友. 问题 json到底有多少种? 当时项目里json的jar包是我直接从别的项目里拷过来的.结果在下面的语句里报错 resultObj = JSONObject.fromObject(json); 也就是我的json包里JSO

应用程序框架实战二十七: 基于Mvc+EasyUi+EF+Autofac的CRUD DEMO免费发放,纯干货,附截图

不知不觉,这个系列已经写了好几十篇了.我本来打算把基础介绍完再发放Demo进行整体说明,不过大部分人更喜欢看得见摸得着的表现层,对后端不是太感兴趣,所以我决定先发一个简单的CRUD Demo出来,让大家先感受一下,被应用程序框架封装之后的代码大体是什么样子. 采用EasyUi作为前端框架,主要是它比Dwz强大,另外也是基于Html扩展,比更强大的Ext要简单得多,更重要的是它越来越流行了,对于更详细的决择或前端架构设计,我会在后续文章说明. 虽然是一个简单的单表CRUD操作,但是分层架构和各方面