使用jqGrid排序/过滤问题 [英] sorting/filtering issue with jqGrid
问题描述
我正在使用 jqGrid 4.5.3。版本我已升级到免费jqGrid版本4.13.6 。升级后我面临以下问题
I was using jqGrid 4.5.3. version which I have upgraded to free jqGrid version 4.13.6. After upgrading I am facing following issues
- 排序不适用于所有列
- 我想要根据我设置的内容显示列大小
autoResizable:true
和autoresizeOnLoad:true
,仍然是列宽未按内容设置
- Sorting is not working for all columns
- I want to display the column size as per the content for which I have set
autoResizable: true
andautoresizeOnLoad: true
, still column width is not set as per content
以下是我在文档上写的 jqGrid代码 .Ready
function
Below is my jqGrid code written on document.Ready
function
jQuery("#jqgrid").jqGrid({
url: '@Url.Action("GetClassList", "Class")',
datatype: 'json',
height: 'auto',
colNames: ['ClassID','CourseID', '@objLocalizer["Class_Title_GridCol"]','@objLocalizer["ViewCourseDetails"]','@objLocalizer["ViewClassSchedule"]', '@objLocalizer["Class_AssignUser"]','@objLocalizer["ClassCreatedBy"]','@objLocalizer["ClassCreatedDate"]'],
colModel: [
{
name: 'Class.ClassID',
index: 'Class.ClassID',
sortable: true,
hidden: true
},
{
name: 'Class.CourseID',
index: 'Class.CourseID',
sortable: true,
hidden: true
},
{
name: 'ClassLang.Title',
index: 'ClassLang.Title',
sortable: true,
formatter: addLink,
},
{
name: 'CourseDetails',
index: 'CourseDetails',
sortable: false,
align: 'center',
title: false,
formatter:AddCourseDetailsLink
},
{
name: 'ClassSchedule',
index: 'ClassSchedule',
sortable: false,
align: 'center',
title: false,
formatter:AddViewClassScheduleLink
},
{
name: 'AssignUser',
index: 'AssignUser',
sortable: false,
align: 'center',
title: false,
formatter: AddAssignUserLink
},
{
name: 'UserName',
index: 'UserName',
align: 'center',
sortable: true
},
{
name: 'Class.WhenCreated',
index: 'Class.WhenCreated',
align: 'center',
formatter:'date',
sortable: true
}],
rowNum: 10,
rowList: [10, 20, 30],
pager: '#pjqgrid',
sortname: "Title",
sortorder: "desc",
toolbarfilter: true,
viewrecords: true,
multiSort: true,
sortable: true,
loadonce: true,
ignoreCase: true,
gridComplete: function () {
$("#progbar").css('width', '100%')
$("#progess").hide();
$("#grid").css("visibility", 'visible');
},
editurl: " ",
caption: "",
multiselect: false,
autowidth: true,
});
我还添加了以下功能,根据可用选项卡展开网格
I have also added the below function to expand the grid as per the available tabs
$(window).on('resize.jqGrid', function () {
$("#jqgrid").jqGrid('setGridWidth', $("#content").width());
})
HTML加价
<div class="well well-sm well-light" id="content">
<div id='divResult'>
@{
await Html.RenderPartialAsync("~/ViewsBackend/Class/_ClassTab.cshtml");
}
</div>
<section id="widget-grid" class="">
<div class="row">
<article class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<div id="grid">
<table id="jqgrid"></table>
<div id="pjqgrid"></div>
<br>
</div>
<br>
</article>
</div>
</section>
</div>
编辑1: -
自定义格式化程序
function addLink(cellvalue, options, rowObject) {
return "<a href='#' style='height:25px;width:120px;' type='button' onclick=CallActionMethod(" + "'" + rowObject.Class.ClassID + "'" + ")>" + rowObject.ClassLang.Title + "</a>";
}
function AddAssignUserLink(cellvalue, options, rowObject){
return "<button class='btn btn-xs btn-default' data-placement='center' title='@objLocalizer["Class_AssignUser"]' onclick='AssignUser(" + rowObject.Class.ClassID + ")'\"><i class='fa fa-users fa-lg' aria-hidden='true'></i></a>";
}
function AddCourseDetailsLink(cellvalue, options, rowObject){
return "<button class='btn btn-xs btn-default' data-placement='center' title='@objLocalizer["ViewCourseDetails"]' onclick='CourseDetails(" + rowObject.Class.CourseID + ")'\"><i class='fa fa-file fa-lg' aria-hidden='true'></i></a>";
}
function AddViewClassScheduleLink(cellvalue, options, rowObject){
return "<button class='btn btn-xs btn-default' data-placement='center' title='@objLocalizer["ViewClassSchedule"]' onclick='ViewClassSchedule(" + rowObject.Class.ClassID + ")'\"><i class='fa fa-calendar fa-lg' aria-hidden='true'></i></a>";
}
这些方法是从自定义格式化程序调用的
function CallActionMethod(cellvalue) {
$.ajax({
type: "POST",
url: '@Url.Action("SetClassDetailsClassID", "Class")',
data: { cellvalue: cellvalue },
success: function (data) {
document.location.href = "@Url.Action("ClassDetails", "Class")";
}
});
}
function ViewClassSchedule(ClassID){
$.ajax({
type: "POST",
url: '@Url.Action("SetClassDetailsClassID", "Class")',
data: { cellvalue: ClassID },
success: function (data) {
document.location.href = "@Url.Action("ClassSchedule", "Class")";
}
});
}
function AssignUser(ClassID) {
$.ajax({
type: "POST",
url: '@Url.Action("AssignUser", "Class")',
data: { classid: ClassID },
success: function (data) {
jQuery(".modal-content").html('');
jQuery(".modal-content").html(data);
jQuery("#AssignUserModal").modal('show');
}
});
}
function CourseDetails(CourseID)
{
$.ajax({
type: "POST",
url: '@Url.Action("setcourseid", "Course")',
data: { cellvalue: CourseID },
success: function (data) {
document.location.href = "@Url.Action("CourseDetails", "Course")";
}
});
}
更新版本的jqGrid的屏幕截图
任何有关此内容的帮助!
Any help on this appreciated !
推荐答案
您可以将代码修改为以下内容
You can fix your code to the following
$(window).on("resize", maximizeGrid);
$grid.on("jqGridAfterLoadComplete", function () {
var colModel = $(this).jqGrid("getGridParam", "colModel"), i, cm;
// reset widthOrg to the new values after autoResizeAllColumns
for (i = 0; i < colModel.length; i++) {
cm = colModel[i];
cm.widthOrg = cm.width;
}
maximizeGrid();
});
$grid.jqGrid({
datatype: "json",
url: "/echo/json/",
mtype: "POST",
postData: {
json: JSON.stringify(serverResponse)
},
colModel: [
{
name: 'ClassID',
key: true,
jsonmap: 'Class.ClassID',
hidden: true
},
{
name: 'Title',
formatter: addLink,
jsonmap: 'ClassLang.Title'
},
{
name: 'CourseDetails',
sortable: false,
align: 'center',
formatter:AddCourseDetailsLink,
title: false
},
{
name: 'ClassSchedule',
sortable: false,
align: 'center',
formatter:AddViewClassScheduleLink,
title: false
},
{
name: 'AssignUser',
sortable: false,
align: 'center',
formatter: AddAssignUserLink,
title: false
},
{
name: 'UserName',
align: 'center'
},
{
name: 'WhenCreated',
jsonmap: 'Class.WhenCreated',
align: 'center',
formatter:'date'
}
],
iconSet: "fontAwesome",
rowNum: 10,
rowList: [10, 20, 30],
pager: true,
sortname: "Title",
sortorder: "desc",
viewrecords: true,
multiSort: true,
sortable: true,
loadonce: true,
additionalProperties: ['Class', 'ClassLang'],
autoencode: true,
cmTemplate: {
autoResizable: true
},
autoresizeOnLoad: true,
autowidth: true,
autoResizing: {
//resetWidthOrg: true,
compact: true
}
});
查看演示 https://jsfiddle.net/OlegKi/b15pmdcg/4/ 。您可以在 widthOrg 的更多详细信息noreferrer>问题。同样的问题解释了新的 resetWidthOrg:true
属性 autoResizing
。
See the demo https://jsfiddle.net/OlegKi/b15pmdcg/4/. You can read more details More details about widthOrg
in the issue. The same issue explains new resetWidthOrg: true
property of autoResizing
.
我建议您考虑使用格式化程序的自定义按钮:actions
(参见 wiki文章了解详情)
I'd recommend you to consider to use custom buttons of the formatter: "actions"
(see the wiki article for details)
{
name: "act", label: "Details", template: "actions", width: 70,
formatoptions: { editbutton: false, delbutton: false }
}
和选项
actionsNavOptions: {
courseDetailsicon: "fa-file",
courseDetailstitle: "show course details",
classScheduleicon: "fa-calendar",
classScheduletitle: "class schedule",
assignUsericon: "fa-users",
assignUsertitle: "Assign user to class",
custom: [
{ action: "courseDetails", position: "first",
onClick: function (options) {
alert("Course Details, rowid=" + options.rowid);
} },
{ action: "classSchedule", position: "first",
onClick: function (options) {
alert("Class Schedule, rowid=" + options.rowid);
} },
{ action: "assignUser",
onClick: function (options) {
alert("Assign User, rowid=" + options.rowid);
} }
]
}
可以看到结果另一个演示 https://jsfiddle.net/OlegKi/rmsz529L/3/
One can see the results on another demo https://jsfiddle.net/OlegKi/rmsz529L/3/
顺便说一句,您可以使用与Boostrap CSS相同的演示而不是jQuery UI CSS。你只需要添加 guiStyle:bootstrap
jqGrid选项:
By the way, you can use the same demos with Boostrap CSS instead of jQuery UI CSS. You will need just add guiStyle: "bootstrap"
option of jqGrid:
https://jsfiddle.net/OlegKi/b15pmdcg/8/
https://jsfiddle.net/OlegKi/rmsz529L/2/
这篇关于使用jqGrid排序/过滤问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!