gpt4 book ai didi

asp.net - jqgrid x pager 的第 1 页

转载 作者:行者123 更新时间:2023-12-04 13:17:54 25 4
gpt4 key购买 nike

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

我正在使用带有 Web 服务的 ASP.Net 来填充我的 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 页。

所以我建议目前您的服务器代码不要返回正确的值 page在输出中。

更新 : 好的杰夫。我在 jqgrid setGridParam datatype:local 中继续我的回答并发布如何 promise 代码如何进行服务器端分页、排序和搜索(或高级搜索)。

首先在这个例子中,我不会真正实现排序和搜索,只模拟你现在有问题的分页。真正的分页、排序和搜索应该实现为对应的 SELECT语句到数据所在的 SQL 数据库。排序遵循 ORDER BY , 搜索到 WHERE并分页到像 TOP(x) 这样的结构, TOP(x)LEFT OUTER JOIN或使用 ROW_NUMBER() OVER(...)结构体。但这些都不是你问题的主题。所以我把一切都简化为数据分页的简单模拟。

我从 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
};
}

在哪里上课 JqGridDataTableRow定义如下:
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 , searchOpersearchString , 但仅当 _search=true .例如,在第一次加载 jqGrid 时, _search=falsesearchField , searchOpersearchString未在 postData 中定义.为了解决这个问题,我们用 null 初始化未定义的参数。 .

要实现排序需要使用 sidx (排序索引)和 sord (排序方向: "asc""desc")参数。

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

在高级搜索期间而不是 searchField , searchOper , searchString参数参数 filters必须使用(见注释行)。必须根据 JSON 反序列化器对数据进行解码。所以必须设置 multipleSearch : true在 jqgrid 中。 serializeGridData功能应替换为
serializeGridData: function (postData) {
if (postData.filters === undefined) postData.filters = null;
return JSON.stringify(postData);
}

并且 web 方法的原型(prototype)应该更改为
public JqGridData TestMethod (int page, int rows, string sidx, string sord,
bool _search, string filters)

解码参数 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更多细节。

关于asp.net - jqgrid x pager 的第 1 页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3161302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com