简单三层架构mvc+datagrid实现分页排序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tianzhen620/article/details/81388315

在vs中采用简单三层架构搭建

之前也在网上找了很多关于datagrid分页排序的例子,感觉都不太好用,自己就动手写了一个,采用简单地三层架构,下面是详细代码。

首先是做出来的页面效果:

 可以进行分页排序,分页的效果是在排序后重新实现的,这个可以根据项目需要进行更改。

首先是html页面:先放一个datagrid表格

 <div data-options="region:'center',split:true" border="false">
        <table id="datagrid">

        </table>

</div>

使用jq对datagrid进行设置,需要引入一些js和easyui包。

 $(function () {
        $('#datagrid').datagrid({
            url: 'StudentInfo.ashx',
            title: '',
            iconCls: 'icon-save',//图标
            pagination: true,//分页
            pageSize: 10,//每页显示条数
            pageList: [10, 20, 30, 40],//调整每页显示条数
            fit: true,//宽高跟随父面板
            fitColumns: false,//水平滚动条
            nowrap: false,//折行显示
            border: false,
            idField: 'id',//标识
            sortName: 'name',
            sortOrder: 'desc',
            columns: [[
                {
                    title: '姓名',
                    field: 'name',
                    width: 100,
                    sortable: true
                },
                {
                    title: '性别',
                    field: 'sex',
                    width: 100,
                    sortable: true
                },
                {
                    title: '年龄',
                    field: 'age',
                    width: 100,
                    sortable: true
                },
               {
                   title: '出生日期',
                   field: 'birthday',
                   width: 300,
                   sortable: true
                   
               },
                {
                    title: '地址',
                    field: 'adress',
                    width: 200,
                    sortable: true
                },
                {
                    title: '电话',
                    field: 'telphone',
                    width: 200,
                    sortable: true
                },
                {
                    title: '邮箱',
                    field: 'email',
                    width: 200,
                    sortable: true
                }

            ]],

//分页的参数会自动post到URL地址页面,排序的参数需要使用函数进行提交
            onSortColum: function (sort, order) {
                $.post({
                    sort: sort,
                    order: order
                })
            }

    });

下面是一般处理程序页面:

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

//采用int.Parse将接收到分页参数转换为int类型
        int rows =int.Parse(context.Request["rows"]);
        string sortname = context.Request["sort"];
        string sortorder = context.Request["order"];

//调用BLL层,传入分页和排序参数
        StudentInfoBLL bll = new StudentInfoBLL();
        context.Response.Write(bll.GetStudentInfo(page,rows,sortname,sortorder));

下面是BLL层:

//调用DAL层的方法

 StudentInfoDAL dal = new StudentInfoDAL();

        public string GetStudentInfo(int page,int rows,string sortname, string sortorder,string name)
        {

//传入DAL层的参数为分页参数和排序参数,返回来的是list对象和数据总行数,需要对list对象转换
            Comlist cl = new Comlist();
            cl.rows = dal.GetStudentInfo(page, rows, sortname, sortorder,name);
            cl.total = dal.GetStudentCount();
            return JsonConvert.SerializeObject(cl);
        }

接下来是DAL层:

 public List<StudentInfo> GetStudentInfo(int page, int rows, string sortname, string sortorder,string name)
        {

//分页排序sql语句,此处是先进行排序,在进行分页,采用row_number方式
            string sql = "SELECT * FROM (select top " + (page * rows) + " ROW_NUMBER() OVER ( ORDER BY " + sortname + "  " + sortorder + " ) AS rownum ,* FROM  StudentInfo) AS temp WHERE temp.rownum > (" + rows * (page - 1) + ") order by   " + sortname + "   " + sortorder;

//此处是连接数据库,进行查询,返回datatable对象
            DataTable dt = SQLHelper.ExecuteTable(sql);
            List<StudentInfo> si = new List<StudentInfo>();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                si.Add(RowToStudentInfo(dt.Rows[i]));
            }
            
            return si;
        }

public int GetStudentCount()
        {

//此处返回的是数据库记录的总行数,即total
            string sql1 = "SELECT count(*) FROM StudentInfo";
            DataTable dt = SQLHelper.ExecuteTable(sql1);
            return int.Parse(dt.Rows[0][0].ToString());
        }

将关系转换成对象就不在此叙述了。

接下来是BLL层中调用了comlist方法的介绍,如果不调用comlist方法,返回的值中包含一个list对象(有多条数据)和一个total总行数,现在需要将两个同时返回,本处采用的是comlist返回,当然也有其他返回方法,高手可以去试试。

下面将comlist介绍一下:

 public class Comlist
    {
        public int total { get; set; }
        public List<StudentInfo> rows { get; set; }
    }
}

comlist包含两个字段,total和rows   注意:此处名字必须是total和rows  否则前段的datagrid接收不到。

展开阅读全文

没有更多推荐了,返回首页