一直想在项目中使用EasyUi的datagrid,但种种原因,没有实现。
这两天在开发一个项目中,愿望终于得以实现。
先看效果:
实现步骤是这样的:
1,在页面中画dataGrid,具体代码如下:
2,后台接收参数,返回需要的Json数据。
////// 用户列表Json /// ///public ActionResult GetUserList() { int currentPageIndex = RequestExtension.GetQueryString ("page", 0); int pagesize = RequestExtension.GetQueryString ("rows", 0); String sort = RequestExtension.GetQueryString ("sort", ""); String order = RequestExtension.GetQueryString ("order", ""); String name = RequestExtension.GetQueryString ("name", ""); Pagination pagin = new Pagination { CurrentPageIndex = currentPageIndex, PageSize = pagesize, OrderBy = String.IsNullOrEmpty(sort) ? "" : String.Concat(sort + " " + order) }; UsersModel condition = new UsersModel(); KeyValuePair > list = usersRepository.UsersPagination(pagin, condition); return JsonExtension.JsonPagination(list.Value, pagin.CurrentPageIndex, pagin.PageSize, list.Key.TotalItemCount); }
3,关键代码,实现Json分页的方法。
////// 分页处理 /// /// /// /// ///public static JsonResult JsonPagination(IEnumerable dataList, int page, int rows, int dataListAuctalCount = -1) { var result = dataList; Dictionary json = new Dictionary (); int total = dataListAuctalCount; if (total == -1 && dataList != null) { //自动分页 total = dataList.Count(); result = dataList.Skip((page - 1) * rows).Take(rows).ToList(); } json.Add("total", total); json.Add("rows", result); return new JsonResult() { Data = json, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; }
4,数据分页查询代码
public KeyValuePair> UsersPagination(Pagination pagin, UsersModel condition) { using (SqlConnection conn = DapperFactory.CrateOpenConnection()) { String condtionStr = ""; String orderBy = "CreateTime DESC"; if (!String.IsNullOrEmpty(pagin.OrderBy)) { orderBy = pagin.OrderBy; } String executeQuery = String.Format(@"WITH pagintable AS( SELECT ROW_NUMBER() OVER(ORDER BY {1} )AS RowID, ID, DomainName, EnName, PassWord, CnName, Email, DeptID, RoleId, CreateMan, CreateTime, EditMan, EditTime, IsValid FROM Users WHERE 1= 1 {0} ) SELECT * FROM pagintable where RowID between ((@CurrentPageIndex - 1) * @PageSize) + 1 and (@CurrentPageIndex * @PageSize)", condtionStr, orderBy); String executeCount = String.Format("SELECT COUNT(*) AS CountNum FROM Users WHERE 1= 1 {0} ", condtionStr); var mixCondition = new { CurrentPageIndex = pagin.CurrentPageIndex, PageSize = pagin.PageSize }; List listScore = conn.Query (executeQuery, mixCondition).ToList(); pagin.TotalItemCount = conn.Query (executeCount, mixCondition).SingleOrDefault (); KeyValuePair > result = new KeyValuePair >(pagin, listScore); return result; } }
看着这精简的代码,和界面上强大的功能,真是有种IT人的自豪感,亲爱的您,是不是也有这种感觉呢?