- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 jqGrid,我需要在加载数据后但在将其解析为网格之前更改模型。换句话说,我想我想在 loadComplete 处理程序中做到这一点。我看到这种方法:Setting JqGrid's colName and colModel from JSON data ,但我已经编写了一堆使用“使用 jqGrid 加载数据”方法的网格,而不是在那里使用的“预加载数据并将其传递给 jqGrid”,我希望避免重新-编码,或者让这个与众不同。
(隐藏和显示隐藏的列也不实用。)
这可能吗?
更多细节:
基本上,在我看到数据之前,我不知道我需要哪些列。假设我按州显示流量:
Date CA WA NY MN
4/20 100 90 85 72
4/21 95 85 89 70
{
date : 4-20,
ca : 100,
wa : 90,
ny : 85,
mn : 72
hi : 56,
il : 30
},
{
date : 4-21,
ca : 95,
wa : 85, // note: for a given row, a column might be relatively lower
ny : 89, // than another. The column order is based on the overall
mn : 70
hi : 60,
il : 45
}
{
date : 4-20,
ny : 110,
hi : 95,
il : 90,
wa : 80
}
最佳答案
我找到了一种看起来可行的方法。
我的解决方案的想法如下。您使用 colModel
有许多隐藏的列,其名称为“cm0”、“cm1”、“cm2”……所有列都具有与您的情况相同的数据。为了更容易地填充数据,我使用自 jqGrid 3.8.2 以来存在的列模板:
var mygrid=jQuery("#list"),
cmIntTemplate = {
width:50,
sorttype:"int",
formatter:"integer",
align:"right",
hidden:true
},
cm = [
// here we define the first columns which we always has
// the list can be empty or has some columns with
// the properties other as the rest (without cmIntTemplate)
{name:"date",label:"Date",key:true,width:100, fixed:true,
formatter:'date',formatoptions:{srcformat:"m-d",newformat:"m/d"}}
], maxCol = 30, dummyColumnNamePrefix = "cm";
// Add dummy hidden columns. All the columns has the same template
for (i=0;i<maxCol;i++) {
cm.push({name:dummyColumnNamePrefix+i,template:cmIntTemplate});
}
jsonReader
其中使用
page
as function :
jsonReader: {
repeatitems: false,
page: function (obj) {
// ------------------------
// here I add the main code
// ------------------------
return obj.page;
}
}
jsonReader.page
返回与默认值相同的值
jsonReader
,但我使用了函数的方式,因为函数会在读取 JSON 数据的主要包含之前直接调用。在代码内部,我获取数据的第一行并使用它的属性名称来填充
jsonmap
对应列的属性并设置列名。此外,我制作了一些虚拟列,以显示所有 JSON 数据可见,其余虚拟列隐藏。应该做的最后一件事是校正先前计算的网格宽度。所以网格看起来像这样:
page
的代码功能如下:
page: function (obj) {
var rows = obj.rows, colModel = mygrid[0].p.colModel,
cmi, iFirstDummy, firstRow, prop,
orgShrinkToFit, isFound,
showColNames = [], hideColNames = [];
if (typeof(rows) === "undefined" || !$.isArray(rows) || rows.length === 0) {
// something wrong need return
return obj.page;
}
// find the index of the first dummy column
// in the colModel. If we use rownumbers:true,
// multiselect:true or subGrid:true additional
// columns will be inserted at the begining
// of the colModel
iFirstDummy = -1;
for(i=0;i<colModel.length;i++) {
cmi = colModel[i];
if (dummyTestRegex.test(cmi.name)) {
iFirstDummy = i;
break;
}
}
if (iFirstDummy === -1) {
// something wrong need return
return obj.page;
}
orgShrinkToFit = clearShrinkToFit();
// we get the first row of the JSON data
firstRow = rows[0];
for (prop in firstRow) {
if (firstRow.hasOwnProperty(prop)) {
// we will use the properties name of the first row
// as the names of the column headers of the grid
// find column index having prop as the name
isFound = false;
for(i=0;i<colModel.length;i++) {
cmi = colModel[i];
if (cmi.name === prop) {
isFound = true;
showColNames.push(prop);
break;
}
}
if(!isFound) {
// labels defines the column names
cmi = colModel[iFirstDummy];
showColNames.push(cmi.name);
mygrid.jqGrid('setLabel',cmi.name,prop);
// because of bug in jqGrid with calculation of width
// we have to reset the width
cmi.width = cmIntTemplate.width;
// we set jsonmap which jqGrid will use instead
// of dummy column names to read all row data
cmi.jsonmap = prop;
iFirstDummy++;
}
}
}
// fill the list of unused columns
for(i=0;i<colModel.length;i++) {
cmi = colModel[i];
if ($.inArray(cmi.name, showColNames) === -1 && dummyTestRegex.test(cmi.name)) {
hideColNames.push(cmi.name);
}
}
mygrid.jqGrid('showCol',showColNames);
mygrid.jqGrid('hideCol',hideColNames);
setGridWidthAndRestoreShrinkToFit(orgShrinkToFit);
return obj.page;
}
page
函数我使用小辅助函数
var clearShrinkToFit = function() {
// save the original value of shrinkToFit
var orgShrinkToFit = mygrid.jqGrid('getGridParam','shrinkToFit');
// set shrinkToFit:false to prevent shrinking
// the grid columns after its showing or hiding
mygrid.jqGrid('setGridParam',{shrinkToFit:false});
return orgShrinkToFit;
},
setGridWidthAndRestoreShrinkToFit = function(orgShrinkToFit) {
// calculate the new grid width
var width=0, i=0, headers=mygrid[0].grid.headers, l=headers.length;
for (;i<l; i++) {
var th = headers[i].el;
if (th.style.display !== "none") {
width += $(th).outerWidth();
}
}
// restore the original value of shrinkToFit
mygrid.jqGrid('setGridParam',{shrinkToFit:orgShrinkToFit});
// set the grid width
mygrid.jqGrid('setGridWidth',width);
},
dummyTestRegex = new RegExp(dummyColumnNamePrefix+"(\\d)+");
关于jqgrid - 使用 jqgrid 加载数据后是否可以修改 colModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5383847/
就像我遇到的情况,我在一个 colModel 中有日期,我需要对当前日期执行数学运算(减去)并将其显示在 jQgrid 中的另一个 colModel json 中, {name:'createdOn'
在我的 mvc jqgrid 代码中,colnames 和 colmodel 返回相同长度的 col。但是当运行应用程序时,我收到此错误。有什么帮助吗? 代码: public WeekColumns
使用JQGrid,是否可以设置默认的colModel以防止重复代码?例如代替 colModel: [ {name:'name',index:'name',width:80,align:center},
使用可选模板和属性在 Web 应用程序中定义免费的 jqgrid colmodel {"template": defaultNumberTemplate, ,"label":"Price","n
如何获取 jqGrid 元素的整个 colModel?我已经浏览了一些源代码,也进行了一些测试,但似乎没有返回实际的数组。 谢谢。 最佳答案 您可以使用getGridParam - 只需传递colMo
我需要找到类似于 this one 的解决方案 问题是:我想从 JSON 数据中获取列名称/模型。 链接上提供的解决方案有效,但一旦获得数据,它就成为 jqgrid 的“本地”,然后服务器的东西就不起
我的jqGrid动态工作。因此所有选项也都是动态加载的。该选项是用 java Map 生成的所有选项都工作得很好,但 de map/opts 内的函数名称不行。这是json用java生成的 map 。
我正在尝试动态创建网格。我的目标是创建一种动态前端来显示一些数据库表。所以我需要动态添加/删除列。我需要动态更改列的数据类型。 我使用 a similar question 中提供的脚本作为答案。 我
我必须创建一个类似于 http://www.chartle.net/ 的数据表有。 最重要的功能是: 可以动态添加/删除行(完成) 可以动态添加/删除列(我该怎么做?) 更改后的colModel可以保
我正在使用 jqgrid 创建网格。这个有“主要”部分,其中包含标题和数据等以及“高级搜索”。不幸的是,他们都使用相同的 getColModel,我想在预先搜索中使用不同的标题和 colname。例如
是否可以为 jqGrid 列提供动态(非硬编码)搜索过滤器值? 所以在例子中如: $('#my-grid').jqGrid({ datatype: 'json',
我有一个 jqGrid,我需要在加载数据后但在将其解析为网格之前更改模型。换句话说,我想我想在 loadComplete 处理程序中做到这一点。我看到这种方法:Setting JqGrid's col
我已使用以下代码将占位符设置为我的网格日期时间字段。现在我想在应用过滤器请求后在另一个 .js 文件中获取此占位符值。 searchoptions: { attr: { placeholder
问题: 使用jqgrid显示表格的数据。表有外键,我们想要显示其外键的文本而不是 ID。我还希望用户可以对外键进行排序和过滤。 示例: 人员表:Id、姓名、EducationId(教育表的外键) 受过
经过 3 个小时的谷歌搜索后,我请求你的帮助。 我的页面上有一个 jqGrid。 网格的重要选项: $("#listU05").jqGrid({ url:'u05json.json', datatyp
我有一个 jqGrid 事件处理程序,它接收 iCol 作为参数。我需要知道如何为给定的 iCol 获取在 colModel 中指定的名称。 例如给定以下 jqGrid 事件处理程序:接收rowid、
我正在使用 jqGrid 作为通用的类似表格的可编辑控件。我的目标是拥有一对 name -> value在 value 所在的表中s 是可编辑的。 只要我不搞砸 colModel 一切都会顺利: 如果
我将在许多不同的网页中使用 JqGrid。我有一些自定义格式化程序和自定义编辑类型例如,我想使用日期选择器来编辑日期 所以,我不想使用 colModel 的 edittype 作为自定义,并提供自定义
伙计们,我正在使用 jqGrid ..并且我想循环遍历 colModels 名称以获取行数据..这是我的代码 $(document).ready(function() { $("#jqGrid")
我正在尝试使用新行、colNames 和 colModel 重新加载 jqGrid。行数据似乎加载正常,但列似乎没有刷新。我试过使用 GridUnload 和 GridDestroy 但我最终完全丢失
我是一名优秀的程序员,十分优秀!