为了达到这个目的,我尝试在网格中填充数据列表,我使用了JqGrid。我已经从nuget manager和online tutorial安装了jqGrid插件,我一直在尝试实现它。
这是我到目前为止所做的: -
查看: -
<h2>Search</h2>
<div class="container">
<div class="row">
<table id="tblRecruiterGrid"></table>
<div id="dvPagination"></div>
</div>
</div>
<link href="~/Content/jquery-ui.css" rel="stylesheet" />
<link href="~/Content/ui.jqgrid.css" rel="stylesheet" />
<script src="~/Scripts/jquery-grid.locale-en.js"></script>
<script src="~/Scripts/jquery.jqGrid.js"></script>
<script src="~/Scripts/recruiter.js"></script>
控制器: -
public ActionResult RecruiterGridData(string sidx = "", string sord = "", int page = 1, int rows = 10)
{
var vData = recruiterRepo.GetAllByRelation();
int pageIndex = Convert.ToInt32(page) - 1;
int pageSize = rows;
int totalRecords = vData.Count();
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
switch (sidx)
{
case "RID":
vData = sord == "desc"
? vData.OrderByDescending(x => x.RecruiterID).ToList()
: vData.OrderBy(x => x.RecruiterID).ToList();
break;
default:
vData = sord == "desc"
? vData.OrderByDescending(x => x.RecruiterID).ToList()
: vData.OrderBy(x => x.RecruiterID).ToList();
break;
}
var vResult = vData.Skip(pageIndex * pageSize).Take(pageSize);
var jsonData = new
{
total = totalPages,
page = page,
records = totalRecords,
rows = vResult.Select(x => new
{
RID = x.RecruiterID,
RecruiterName = x.RecruiterName,
Email = x.Email,
CompanyName = x.CompanyName,
Designation = x.Designation,
Mobile = x.Mobile
}).ToList()
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
使用Javascript: -
$(function () {
$('#tblRecruiterGrid').jqGrid({
url: "/Recruiter/RecruiterGridData/",
datatype: 'json',
mtype: 'get',
colNames: ['RID', 'Recruiter Name', 'Email', 'Company Name', 'Designation', 'Mobile'],
colModel: [{ key: true, hidden: true, name: 'RID' },
{ key: false, hidden: false, name: 'RecruiterName' },
{ key: false, hidden: false, name: 'Email' },
{ key: false, hidden: false, name: 'CompanyName' },
{ key: false, hidden: false, name: 'Designation' },
{ key: false, hidden: false, name: 'Mobile' }],
pager: '#dvPagination',
rowNum: 10,
rowList: [5, 10, 25, 50, 100],
sortname: 'RID',
sortorder: "asc",
height: 'auto',
gridview: true,
autoencode: true,
viewrecords: true,
caption: '',
emptyrecords: 'No records to display',
jsonReader: { repeatitems: false, id: 'RID' },
autowidth: true,
multiselect: false,
});
});
我能够在jqGrid中填充数据但是分页导致了问题。在浏览器开发人员控制台中,我收到一个未定义的错误,因为它没有正确加载分页。我试图在谷歌搜索问题,但每个结果部分指出包括缺少jqGrid文件 grid.locale-en.js
我已经在我的视图中包含一些建议检查是否 {{1} } 在 grid.locale-en.js
之前加载,所以当我在网络中跟踪时,我得到了以下结果。
在做了很多R&amp; D之后我还是无法解决以下错误: -
未捕获的TypeError:无法读取属性&#39;整数&#39;未定义的
注意: - Jquery库已在布局头部分中定义。
答案 0 :(得分:1)
请始终包含您使用的jqGrid的确切版本号,以及有关jqGrid(free jqGrid,Guriddo jqGrid JS的分叉或版本&lt; = 4.7中的旧jqGrid的信息,其中你用。
我想你使用了一些旧版本的jqGrid,你只是使用了错误的名称来定位locale(本地化)文件。文件名jquery-grid.locale-en.js
非常被怀疑。 jqGrid的分布为i18n
,文件为grid.locale-en.js
。在填充jqGrid的寻呼机期间,使用没有语言环境文件的旧jqGrid会产生错误Cannot read property 'integer' of undefined
。
代码中的另一个重要错误是使用key: true
属性作为一列。该列必须在每一行中都有唯一值。属性key: true
通知jqGrid使用列中的包含而不是id
属性。您已使用选项jsonReader: { repeatitems: false, id: 'RID' }
,该选项通知使用item的RID
属性作为rowid。我建议您从RID
中删除不需要的隐藏colModel
列,并从所有其他列中删除key: true, hidden: false
。您可以使用默认值删除选项:mtype: 'get'
,sortorder: "asc"
,caption: ''
和multiselect: false
。
我建议你尝试使用free jqGrid,它是jqGrid的分支,我在Tony Tomov将jqGrid的许可协议更改为{{{{ 3}}(见Guriddo jqGrid JS)。许多新功能,其中 我在the post中描述了在免费jqGrid中实现的内容,并对当前发布的所有版本进行了自述。