ASP.NET使用EasyUI-DataGrid + ashx + JQuery Ajax:实现数据的增删查改,查询和分页!

转自:http://www.cnblogs.com/lt-style/p/3457399.html

数据表:

学生表:学生编号、姓名、性别、班级编号、年龄

班级表:班级编号、班级名称

开发过程:

1.下载EasyUI的开发包

2.引用相关文件:

复制代码
<link href="/CSS/easyui.css" rel="stylesheet" type="text/css" />

    <link href="/CSS/demo.css" rel="stylesheet" type="text/css" />

    <link href="/CSS/icon.css" rel="stylesheet" type="text/css" />

    <script src="/Packages/jquery-1.6.4.min.js" type="text/javascript"></script>

    <script src="/Packages/jquery.easyui.min.js" type="text/javascript"></script>

    <script src="/Packages/EditStuInfo.js" type="text/javascript"></script>

    <script src="/Packages/easyui-lang-zh_CN.js" type="text/javascript"></script>
复制代码

3.引用相关图片文件:

image

要注意的是Css文件中的图片路路径,如果是使用默认的路径,那么图片文件应该放在css所在文件的同级目录,如果是其它目录,则要修改css中的图片路径

4.建立表格、对话框、及按钮:

复制代码
<!--Search Begin-->

    根据班级查询学生信息:

    <select id="classNum_Search"></select>&nbsp;&nbsp;

    <a href="#" class="easyui-linkbutton" onclick="searchStuByClassNum()">查询</a>

    <br />

    <!--Search End-->



    <!--StuInfo_Table Begin-->

    <table id="dg" title="学生信息管理" class="easyui-datagrid" style="width:700px;height:365px"

            url="/ashx/StudentInfo.ashx?Action=Load"

            toolbar="#toolbar" pagination="true"

            rownumbers="true" fitColumns="true" singleSelect="true">

        <thead>

            <tr>

                <th field="Id" width="50">ID</th>

                <th field="StuNum" width="50">学生编号</th>

                <th field="StuName" width="50">姓名</th>

                <th field="ClasName" width="50">班级</th>

                <th field="StuGender" width="50">性别</th>

                <th field="StuAge" width="50">年龄</th>

            </tr>

        </thead>

    </table>

    <div id="toolbar">

        <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>

    <!--StuInfo_Table End-->



    <!--StuInfo_Dialog Begin-->

    <div id="dlg" class="easyui-dialog" style="width:400px;height:280px;padding:10px 20px"

            closed="true" buttons="#dlg-buttons">

        <div class="ftitle">学生信息</div>

        <form id="fm" method="post" novalidate action="">

            <div class="fitem">

                <label>学生编号:</label>

                <input name="StuNum" class="easyui-validatebox"/>

            </div>

            <div class="fitem">

                <label>姓名:</label>

                <input name="StuName" class="easyui-validatebox" required="true"/>

            </div>

            <div class="fitem">

                <label>班级:</label>

                <select name="ClassNum" id="ClassNum" ></select>

            </div>

            <div class="fitem">

                <label>性别:</label>

                <input id="rdoMan" name="StuGender" type="radio" value="1" /><input id="rdoWuman" name="StuGender" type="radio" value="0" /></div>

            <div class="fitem">

                <label>年龄:</label>

                <input name="StuAge" class="easyui-validatebox" required="true" />

            </div>

        </form>

    </div>

    <!--StuInfo_Dialog End-->



    <div id="dlg-buttons">

        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="saveUser()">保存</a>

        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')">取消</a>

    </div>

</div>
复制代码

5.对数据操作的JS代码:

复制代码
var url;



//添加

function newUser() {

    $('#dlg').dialog('open').dialog('setTitle', '添加学生信息');

    $('#fm').form('clear');



    //获取最大的学生ID并加1

    $.get("/ashx/StudentInfo.ashx?Action=GetMaxNum", function (data) {

        $("#fm input[name='StuNum']").val(data).attr("readonly", "readonly");

    });



    //获取班级信息

    $.get("/ashx/StudentInfo.ashx?Action=GetClassInfo", function (data) {

        $("#ClassNum").html("").append(data);

        $("#ClassNum").eq(0).attr("selected", "selected");

    });



    //默认性别男被选中

    $("#fm input[name='StuGender']").eq(0).attr("checked", "checked");



    url = '/ashx/StudentInfo.ashx?Action=Save';

}



//更新

function editUser() {

    var row = $('#dg').datagrid('getSelected');

    if (row) {

        $('#dlg').dialog('open').dialog('setTitle', '编辑学生信息');

        $('#fm').form('load', row);



        //获取和设置班级的状态

        $.get("/ashx/StudentInfo.ashx?Action=GetClassInfo", function (data) {

            $("#ClassNum").html("").append(data);

            $("#ClassNum option").each(function () {

                if ($(this).text() == row.ClasName) {

                    $(this).attr("selected", "selected");

                }

            });



            //.eq(0).attr("selected", "selected");

        });



        //获取和设置性别的选中状态

        if (row.StuGender == "男") {

            $("#fm input[name='StuGender']").eq(0).attr("checked", "checked");

        }

        else {

            $("#fm input[name='StuGender']").eq(1).attr("checked", "checked");

        }

        url = '/ashx/StudentInfo.ashx?Action=Update&id=' + row.Id;



    }

}



//保存

function saveUser() {

    $('#fm').form('submit', {

        url: url,

        onSubmit: function () {

            return $(this).form('validate');

        },

        success: function (result) {

            if (result == "False") {

                $.messager.show({

                    title: '友情提示',

                    msg: 'Sorry, 出错了,请重试 :('

                });

            } else {

                $('#dlg').dialog('close');        // close the dialog

                $('#dg').datagrid('reload');    // reload the user data

            }

        }

    });

}



//删除

function destroyUser() {

    var row = $('#dg').datagrid('getSelected');

    if (row) {

        $.messager.confirm('友情提示', '确定要删除数据吗,删除后将无法找回?', function (r) {

            if (r) {

                $.post('/ashx/StudentInfo.ashx', { "Action": "Delete", "id": row.Id }, function (result) {

                    if (result == "True") {

                        $('#dg').datagrid('reload');    // reload the user data

                    } else {

                        $.messager.show({    // show error message

                            title: '错误提示!',

                            msg: "服务器错误,请刷新重试 :("

                        });

                    }

                });

            }

        });

    }

}



//根据班级查询学生信息

function searchStuByClassNum() {

    var classNum = $("#classNum_Search").val();

    $('#dg').datagrid({

        url: "/ashx/StudentInfo.ashx?Action=SearchStu",

        queryParams: { "classNum": classNum }

    })

};



//加载班级信息到查询列表中

$(function () {

    $.get("/ashx/StudentInfo.ashx?Action=GetClassInfo", function (data) {

        $("#classNum_Search").html("").append(data);

        $("#classNum_Search option").eq(0).attr("selected", "selected");

    });

})
复制代码

6.后台数据处理文件 ashx

复制代码
using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Configuration;

using System.Text;



namespace TestStuMS.Ashx

{

    /// <summary>

    /// StudentInfo 的摘要说明

    /// </summary>

    public class StudentInfo : IHttpHandler

    {

       public BLL.Students bllStu = new BLL.Students();

       public BLL.StuClass bllClass = new BLL.StuClass();



        public void ProcessRequest(HttpContext context)

        {

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

            

            //获取请求的动作

            string action = context.Request["Action"];

            if (string.IsNullOrEmpty(action)) return;



            switch (action)

            {

                case "Save"://添加

                    context.Response.Write(AddStuInfo(context));

                    break;

                case "Delete"://删除

                    context.Response.Write(DeleteStuInfo(context));

                    break;

                case "Update"://更新

                    context.Response.Write(UpdateStuInfo(context));

                    break;

                case "Load"://加载与分页

                    context.Response.Write(BuildPager(context));

                    break;

                case "GetMaxNum"://获取新学生编号

                    context.Response.Write(GetMaxNum()+1);

                    break;

                case "GetClassInfo"://获取班级信息

                    context.Response.Write(GetClassInfo(context));

                    break;

                case "SearchStu"://根据班级获取学生信息

                    context.Response.Write(GetStuInfoByClassNum(context));

                    break;

            }



        }



        #region 方法



        //添加

        private bool AddStuInfo(HttpContext context)

        {

            //stuNum:1201009

            //stuName:星期三

            //classNum:1201

            //stuGender:男

            //stuAge:20



            Model.Students model= new Model.Students();

            model.StuNum = int.Parse(context.Request["StuNum"]);

            model.ClassNum = int.Parse(context.Request["ClassNum"]);

            model.StuName = context.Request["StuName"];

            model.StuGender = context.Request["StuGender"]=="1"?true:false;

            model.StuAge = int.Parse(context.Request["StuAge"]);



            return bllStu.Add(model);//如果是成功则返回True否则返回False

        }



        //更新

        private bool UpdateStuInfo(HttpContext context)

        {

            Model.Students model = new Model.Students();

            model.Id = int.Parse(context.Request["id"]);

            model.StuNum = int.Parse(context.Request["StuNum"]);

            model.ClassNum = int.Parse(context.Request["ClassNum"]);

            model.StuName = context.Request["StuName"];

            model.StuGender = context.Request["StuGender"] == "1" ? true : false;

            model.StuAge = int.Parse(context.Request["StuAge"]);



            return bllStu.Update(model);

        }



        //删除

        private bool DeleteStuInfo(HttpContext context)

        {

            int Id = int.Parse(context.Request["id"]);

            return bllStu.Delete(Id);

        }



        //分页

        private string BuildPager(HttpContext context)

        {

            int pageIndex = int.Parse(context.Request["page"]);

            int pageSize = int.Parse(context.Request["rows"]);



            List<Model.Students> stuList = bllStu.GetModelList("");

            List<Model.StuClass> classList = bllClass.GetModelList("");



            //获取学生信息

            var stuInfo = stuList.Join(classList,

                s => s.ClassNum,

                c => c.ClassNum,

                (s, c) => new { s.Id, s.StuNum, s.StuName, c.ClasName, StuGender = s.StuGender == true ? "" : "", s.StuAge }

                );



            //查询分页数据

            var pageData = stuInfo.Where(s => s.Id > 0)

                .OrderByDescending(s => s.Id)

                .Skip((pageIndex-1) * pageSize)

                .Take(pageSize).ToList();



            var data = new { total = stuInfo.Count(), rows = pageData };



            //序列化成JSON格式数据

            System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();



            return jss.Serialize(data);





        }



        //获取班级信息

        private string GetClassInfo(HttpContext context)

        {

           List< Model.StuClass> classList =  bllClass.GetModelList("");

           StringBuilder sb = new StringBuilder();



           foreach (var stuClass in classList)

           {

               sb.Append("<option value='" + stuClass.ClassNum + "'>" + stuClass.ClasName + "</option>");

           }



           return sb.ToString();

        }



        //获取学生最大ID(以便新添加的ID保持唯一)

        private int GetMaxNum()

        {

           return bllStu.GetMaxStuNum();

        }



        //根据班级获取学生信息

        private string GetStuInfoByClassNum(HttpContext context)

        { 

            int classNum = int.Parse(context.Request["classNum"]);



            List<Model.Students> stuList = bllStu.GetModelList("ClassNum=" + classNum);

            List<Model.StuClass> classList = bllClass.GetModelList("");



            //根据班级获取学生信息

            var stuInfo = stuList.Join(classList,

                s => s.ClassNum,

                c => c.ClassNum,

                (s, c) => new {s.ClassNum, s.Id, s.StuNum, s.StuName, c.ClasName, StuGender = s.StuGender == true ? "" : "", s.StuAge }

                ).Where(i=>i.ClassNum==classNum);



            //序列化成JSON格式数据

            System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();



            return jss.Serialize(stuInfo.ToList());



        }



        #endregion



        public bool IsReusable

        {

            get

            {

                return false;

            }

        }

    }

}
复制代码

7.效果图:

image

 

你可能感兴趣的:(jQuery ajax)