asp.net – jqgrid第1页的x pager

我试图弄清楚如何使用jqGrid的分页功能.
目前我被困在第1页的第4页.无论我是否按下“下一步”按钮.它只停留在1.

我正在使用ASP.Net和webservice来填充我的JSON数据.如何从客户端捕获事件以填充Web服务上的属性以恢复正确的值?

任何帮助表示赞赏.

解决方法

如果按“下一步”按钮,将向服务器发送新请求.该请求将包含page = 2,例如,rows = 10个参数作为URL的一部分(如果想要获得第二页的下一行10行).

您的服务器代码应读取此参数并发回相应的数据行.从服务器发回的JSON数据应如下所示

{ 
  "total": "5","page": "2","records": "55","rows" : [
    {"id" :"21","cell" :["cell11","cell12","cell13"]},{"id" :"22","cell" :["cell21","cell22","cell23"]},...
    {"id" :"30","cell" :["cell31","cell32","cell33"]},]
}

(见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_data).因此,数据必须包含页面的正确值(page = 2).通常情况下,现在您可以像以前一样拥有更少的数据,并在请求中返回页码1以获取页码2.

所以我建议你的服务器代码目前没有在输出中返回正确的页面值.

更新:好的杰夫.我在jqgrid setGridParam datatype:local继续我的答案,并发布如何承诺一个代码如何服务器端分页,排序和搜索(或高级搜索).

首先在这个例子中,我不会真正实现排序和搜索,只能模拟你现在遇到问题的分页.真正的分页,排序和搜索应该作为数据存在的SQL数据库的相应SELECT语句来实现.排序遵循ORDER BY,搜索WHERE并使用LEFT OUTER JOIN或使用ROW_NUMBER()OVER(…)构造对TOP(x),TOP(x)等构造进行分页.但这些都不是你问题的主题.所以我减少了对数据分页的简单模拟.

我从ASMX Web方法的代码开始:

public JqGridData TestMethod (int page,int rows,string sidx,string sord,bool _search,string searchField,string searchOper,string searchString) {
    // for advance search use "string filters" instead of the last three parameters
    int recordsCount = 205;

    int startIndex = (page - 1) * rows;
    int endIndex = (startIndex + rows < recordsCount) ?
                   startIndex + rows : recordsCount; 
    List<TableRow> gridRows = new List<TableRow> (rows);
    for (int i = startIndex; i < endIndex; i++) {
        gridRows.Add (new TableRow () {
            id = i,cell = new List<string> (2) {
                string.Format("Name{0}",i),string.Format("Title{0}",i)
            }
        });
    }

    return new JqGridData () {
        total = (recordsCount + rows - 1) / rows,page = page,records = recordsCount,rows = gridRows
    };
}

其中类JqGridData和TableRow的定义如下:

public class TableRow {
    public int id { get; set; }
    public List<string> cell { get; set; }
}
public class JqGridData {
    public int total { get; set; }
    public int page { get; set; }
    public int records { get; set; }
    public List<TableRow> rows { get; set; }
}

我们跳过对TestMethod的输入参数的任何验证,以使代码示例更具可读性.

现在客户端代码:

$("#list").jqGrid({
    url: './MyTestWS.asmx/TestMethod',datatype: 'json',mtype: 'POST',ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },serializeGridData: function (postData) {
        if (postData.searchField === undefined) postData.searchField = null;
        if (postData.searchString === undefined) postData.searchString = null;
        if (postData.searchOper === undefined) postData.searchOper = null;
        //if (postData.filters === undefined) postData.filters = null;
        return JSON.stringify(postData);
    },jsonReader: {
        root: function (obj) { return obj.d.rows; },page: function (obj) { return obj.d.page; },total: function (obj) { return obj.d.total; },records: function (obj) { return obj.d.records; }
    },// you can also use following more simple form of jsonReader instead:
    // jsonReader: { root: "d.rows",page: "d.page",total: "d.total",//               records: "d.records",id: "d.names" }
    colModel: [
        { name: 'name',label: 'Name',width: 250 },{ name: 'title',label: 'Title',width: 250 }
    ],rowNum: 10,rowList: [10,20,300],sortname: 'name',sortorder: "asc",pager: "#pager",viewrecords: true,gridview: true,rownumbers: true,height: 250,caption: 'My first grid'
}).jqGrid('navGrid','#pager',{edit: false,add: false,del: false,search: true});
//                {},// use default settings for edit
//                {},// use default settings for add
//                {},// delete instead that del:false we need this
//                {multipleSearch : true} // enable the advanced searching
//                );

在代码中我使用与jqgrid setGridParam datatype:local相同的技术,但serializeGridData函数的代码有点不同.因为我们使用POST而不是GET方法从服务器获取数据,所以必须始终设置Web方法的所有输入参数.另一方面,jqGrid设置并不总是参数searchField,searchOper和searchString,但仅限于_search = true.例如,在第一次加载jqGrid时,_search = false和searchField,searchOper和searchString都没有在postData中定义.为了解决这个问题,我们用null初始化未定义的参数.

要实现排序,需要使用sidx(排序索引)和sord(排序方向:“asc”或“desc”)参数.

要实现搜索,需要使用其他参数_search,searchField,searchOper,searchString.

在高级搜索而不是searchField,searchString参数期间,必须使用参数过滤器(请参阅注释行).必须根据JSON解串器对数据进行解码.所以必须在jqgrid中设置multipleSearch:true.应该将serializeGridData函数替换为

serializeGridData: function (postData) {
    if (postData.filters === undefined) postData.filters = null;
    return JSON.stringify(postData);
}

并且应该将Web方法的原型更改为

public JqGridData TestMethod (int page,string filters)

解码参数过滤器可以使用这样简单的代码:

if (_search && !String.IsNullOrEmpty (filters)) {
    JavaScriptSerializer serializer = new JavaScriptSerializer ();
    jqGridSearchFilter searchFilter =
        serializer.Deserialize<jqGridSearchFilter> (filters);
    // use the searchFilter here
}

其中类jqGridSearchFilter可以定义如下:

public class jqGridSearchFilterItem {
    public string field { get; set; }
    public string op { get; set; }
    public string data { get; set; }
}
public class jqGridSearchFilter {
    public string groupOp { get; set; }
    public List<jqGridSearchFilterItem> rules { get; set; }
}

我希望这些信息足以让您实现ASMX Web方法的任何类型的jqGrid用法.

我在这里使用了从服务器发送到客户端的最简单的数据,并在主数据之外添加了额外的id.如果表中的其中一列是id,则可以稍微减少发送到服务器的数据.有关详细信息,请参见Jqgrid 3.7 does not show rows in internet explorer.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


判断URL文件是不是在于在。private static bool UrlIsExist(string url){ System.Uri u = null; try { u = new Uri(url); } catch { return false; } bool isExist = false;
由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值。立马报错。解决方案一:在.aspx文件头中加入这句:解决方案二:修改web.config文件:因为validateRequest默认值为true。只要设为false即可。
public static bool ProcessIdCard(this string idCard, out DateTime birthday, out string genderName) { bool result; birthda...
如果你在GridView控件上设置 AllowPaging=&quot;true&quot; or AllowSorting=&quot;true&quot; 而没有使用使用数据源控件 DataSource (i.e. SqlDataSource, ObjectDataSource),运行则会出现下
protected void Page_Load(object sender, EventArgs e){ ScriptManager sm = Page.Master.FindControl(&quot;ScriptManager1&quot;) as ScriptManager; if (sm
1. install all features in IIS2. Try the following steps to register it.run %windir%\Microsoft.NET\Framework\v4.0.21006\aspnet_regiis.exe -i或运行,跳出如下错误
一般来说一个 HTML 文档有很多标签,比如“”、“”、“”等,想把文档中的 img 标签提取出来并不是一件容易的事。由于 img 标签样式变化多端,使提取的时候用程序寻找并不容易。于是想要寻找它们就必须写一个非常健全的正则表达式,不然有可能会找得不全,或者找出来的不是正确的 img 标签。我们可以
asp.net updatepanel 局部刷新,导致JS不能加载,而无法使用,而且 updatepanel会刷两次,郁闷的。解决方法如下:
FileHandlerhttp://www.cnblogs.com/vipsoft/p/3627709.htmlUpdatePanel无法导出下载文件:http://www.cnblogs.com/vipsoft/p/3298299.html//相对路径下载。path: ~/DownLoad///p
本地能上传文件,部署到服务器上就报Cannot access a closed file 错误,以下是解决方法: 最重要是requestLengthDiskThreshold此属性设置输入流缓冲阈值。
http://tool.oschina.net/commons字符十进制转义字符&quot;&amp;#34;&amp;quot;&amp;&amp;#38;&amp;amp;&amp;#62;&amp;gt;不断开空格(non-breaking space)&amp;#160;HTML特殊转义字符
1、2两步为推荐做法1. 将MySql.Data.dll放到 bin目录下面,或都安装mysql-connector-net-6.0.0.msi2.web.config 添加如下节点,注册版本号一致 3.全局配置在C:\WINDOWS\Microsoft.NET\Framework\v2.0.507
C# 跳转新页面string url = &quot;http://www.vipsoft.com.cn&quot;;ResponseRedirect.Redirect(Response, url, &quot;_blank&quot;, &quot;&#39;toolbar=0,scrollbar
.NET Core 在其上下文中,该请求的地址无效。 看了端口,发现没被占用,后来发现是IP地址变了 改成正确的IP就可以了。
datatable是一个jquery扩展的表格插件。其提供了强大的表格功能。官方地址:http://www.datatables.net/在官方示例中,对于表格的是否可排序是在初始化中设置的一个值来决定的$(&quot;.datatable-simplified&quot;).dataTable(
Html table 细边框 导航页档 军事 历史 ...
C# 跳转新页面判断URL文件是不是在于在。C# 指定物理目录下载文件,Response.End导致“正在中止线程”异常的问题public class FileHandler { public static bool DownLoadFile(string path, string fileName
由于将IE11升级到了 11 之前的网站无法正常使用,如果是开发人员碰到之问题,使用了微软的asp.net 控件,那么将服务器的.net framework 升级到 4.5http://www.microsoft.com/en-us/download/details.aspx?id=30653如果浏
引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个Nginx-Powered AspNet Core Web准生产应用。 在开始之前,我们还是重温一下部署原理,正如你所常见的.Net Core 部署图: 在Linux上部署.Net Core App最好的方式是在Linux机器