基于jqgrid + ashx + nhibernate的分页
2021-01-16 23:12
标签:records src 代码 try Once des turn erro mod 因为我目前运维的是一个webform项目,项目中未用到分页的功能,我百度了很多文章也没有一篇是结合jqgrid + ashx + nhibernate的分页,可能是因为后台要请求ashx的原因,不像mvc直接可以请求一个方法就可以了。 那就让我们从页面到后台来一步步解析jqgrid的分页吧。 1、初始化表格的代码如下 在这个初始化表格的代码中有几点是要注意的: a. jsonReader中只要设置repeatitems 为 false就可以了 其它的被注掉的参数是默认的。 b. postData 参数是我们查询的条件。在调用这个方法时要初始化好参数对应的值。例如:startDate 和 endDate 2、在页面的JS执行入口加载数据可以这样写 因为在用户点击查询时可能会修改查询代码,那postData这里带上修改后的查询代码是很重要的。 这里面可以看到分页方法 SetFirstResult 和 SetMaxResults 其它都是加的一些查询条件。 这个方法只是获取了分页的数据,现在还需要获取总的数据条数,请看如下的方法: 查询数据总条数是我是通过sql写的,暂时我也没有发现是否可以通过Expression表达式写,就像上面的查询数据的方法一样。如果可以那会省一次事,不用还去搞sql. 到此从前端到后端所有的代码都讲解完了,后台项目的中都可以用这个分页的方法了。 有需要大量进行微信投票或点赞的朋友可以给我留言哦! 基于jqgrid + ashx + nhibernate的分页 标签:records src 代码 try Once des turn erro mod 原文地址:https://www.cnblogs.com/zhengwei-cq/p/13373330.html function initGrid() {
localGrid = jQuery("#tbList");
localGrid.jqGrid({
//data: localData,
url:"JqgridPageHandler.ashx",
datatype: "json",
gridview: true,
height: 300,
width: ‘95%‘,
rowNum: 10,
rowList: [10, 100, 500, 1000],
colNames: columns,
autowidth: true,
hoverrows: false,
colModel: [
{ name: ‘Id‘, hidden: true, index: ‘Id‘, width: 40, key: true },
{ name: ‘Name‘, index: ‘Name‘, width: 40, align: "center" },
{ name: ‘ExamType‘, index: ‘ExamType‘, width: 100, align: "center" },
{ name: ‘Score‘, index: ‘Score‘, width: 30, align: "center" },
{ name: ‘QuerySite‘, index: ‘QuerySite‘, width: 120, align: "center" },
{ name: ‘ExamTime‘, index: ‘ExamTime‘, width: 60, formatter: "date", formatoptions: { srcformat: ‘Y-m-d ‘, newformat: ‘Y-m-d ‘ }, align: "center" },
{ name: ‘CreatedTime‘, index: ‘CreatedTime‘, width: 60, formatter: "date", formatoptions: { srcformat: ‘Y-m-d ‘, newformat: ‘Y-m-d ‘ }, align: "center" },
{ name: ‘StatusText‘, index: ‘StatusText‘, width: 50, align: "center" },
{ name: ‘Remark‘, index: ‘Remark‘, width: 120, align: "center" }
],
emptyrecords: "没有任何数据",
pager: "#pager",
viewrecords: true,
rownumbers: true,
//loadonce: true,
caption: "外语成绩单",
multiselect: false,
postData: {//参数
name: $j("#name").val(),
examType: $j("#examType").val(),
startDate: startDate,
endDate: endDate,
isCreateTime: document.getElementById("").checked
},
jsonReader: {
//rows: "rows",
//page: "page",
//total: "total", // 很重要 定义了 后台分页参数的名字。
//records: "records",
repeatitems: false,
}
}).navGrid(‘#pager‘, { edit: false, add: false, del: false, searchtext: "搜索" }, {}, {}, {}, { search: true, sopt: [‘cn‘, ‘eq‘, ‘ge‘, ‘gt‘, ‘le‘, ‘lt‘] });
gridHelper.SetAutoResize(localGrid, -20, -265, true, true);
}
jQuery(document).ready(function () {
initDate();
initGrid();
});
initDate()方法就是为了初始化参数的 startDate 和 endDate 的值
3、当我们进入页面时会调用2中的方法进入后台 JqgridPageHandler.ashx 中的ProcessRequest方法,我们再进入这个方法中看他是如何接收参数和构造返回值的吧. public void ProcessRequest(HttpContext context)
{
int pageSize = int.Parse(context.Request["rows"]);
int pageIndex = int.Parse(context.Request["page"]);
string name = context.Request["name"].ToString();
string examType = context.Request["examType"].ToString();
DateTime startDate =DateTime.Parse(context.Request["startDate"].ToString());
DateTime endDate = DateTime.Parse(context.Request["endDate"].ToString());
bool isCreateTime =bool.Parse(context.Request["isCreateTime"].ToString());
List
context.Request["page"],context.Request["rows"]这个中的rows是jqgrid默认往后台传的参数,其它参数的都是我们在页面上通过postData构造的。
再看看我们返回的参数吧,前端页面要接收一个json的对象,其中rows中包括了行,total就总页数,count是总条数,page是当前页面。这样传到前台去就可以了。
另外我们页面上肯定还会加一个查询的按钮,点击查询时会重新去加载jqgrid.代码如下: function doQuery() {
initDate();
localGrid.jqGrid(‘clearGridData‘);
localGrid.jqGrid(‘setGridParam‘, {
url: ‘JqgridPageHandler.ashx‘,
postData: {
name: $j("#name").val(),
examType: $j("#examType").val(),
startDate: startDate,
endDate: endDate,
isCreateTime: document.getElementById("").checked
},
datatype: "json",
mtype: ‘post‘,
}).trigger(‘reloadGrid‘);
}
4、我们再来看看ESService.GetByPage 和 ESService.GetCount 方法是如何在NHibernate中实现的吧 public List
public int GetCount(bool isCreateTime,DateTime startDate, DateTime endDate, string unitCode, string name, string examType)
{
StringBuilder sb = new StringBuilder();
if(isCreateTime)
{
sb.AppendFormat("select count(*) from ES as es where es.CreatedTime between convert(datetime,‘{0}‘,111) and convert(datetime,‘{1}‘,111)", startDate, endDate);
}else
{
sb.AppendFormat("select count(*) from ES as es where es.ExamTime between convert(datetime,‘{0}‘,111) and convert(datetime,‘{1}‘,111)", startDate, endDate);
}
if(!string.IsNullOrEmpty(unitCode))
{
sb.AppendFormat(" and es.CeaterUnitCode like ‘{0}%‘", unitCode.Trim());
}
if(!string.IsNullOrEmpty(name))
{
sb.AppendFormat(" and es.Name = ‘{0}‘", name);
}
if(!string.IsNullOrEmpty(examType))
{
sb.AppendFormat(" and es.ExamType like ‘%{0}%‘", examType);
}
IEnumerator enumerator = session.CreateQuery(sb.ToString()).List().GetEnumerator();
enumerator.MoveNext();
return (int)enumerator.Current;
}
文章标题:基于jqgrid + ashx + nhibernate的分页
文章链接:http://soscw.com/index.php/essay/42920.html