我是 jqGrid 的新手,但学习速度很快......
我正在将 jqGrid 与本地数据一起使用。它显示某些对象的状态,并且它们正在实时更改。我通过基于彗星的 API 接收状态更改,这些更改需要我在表中添加/更改/删除行。数据需要保持按隐藏的“排序顺序”列排序。我认为,这使得静态排序更容易。
所以我没有使用“数据”参数,我没有“加载”任何数据,我一次添加一行。
我正在考虑进行每次插入,我可以在每次插入后重新排列行,或者更好地遍历表数据中的项目,直到最后,或者找到一个比一个更大的(通过这个排序值)我正在补充。然后在这一行之前添加新的。目前我将它们全部添加到第 1 行,每个对象都像这样:
jQuery("#mygrid").jqGrid('addRowData',1, obj);
所以我看到了它们,它们看起来很棒,但它们的顺序还不是正确的。
删除(我认为)很容易。我还没有到那里。
但是,变化呢?数据的更改可能包括“排序顺序”值的更改,因此我希望在每次更改后重新使用数据。我相信我可以将这个隐藏列定义为排序列,当数据发生变化时,改变底层数据。有没有一种简单的方法可以让网格“重新排序”它拥有的行?我尝试了 $('#mygrid').trigger("reloadGrid") 但这并没有采取任何措施......在使用上面的 'addRowData' 调用加载初始数据后,它没有任何效果。数据还是一样...
我在正确的轨道上吗?是否有一个示例以编程方式添加行、更改行、删除行、使用网格真的只是为了显示事物的当前排序状态?
这是我在 $(document).ready() 中创建的网格定义
html: <table id='mygrid'></table>
jQuery("#mygrid").jqGrid({
datatype: "local",
loadonce: true,
scroll:1,
height: "auto",
width: '100%',
colNames:['A','B', 'C', 'D', 'SortKey'],
colModel:[
{name:'a',index:'a'},
{name:'b',index:'b'},
{name:'c',index:'c'},
{name:'d',index:'d'},
{name:'sortordering',index:'sortordering', hidden:true}
],
rowNum:200,
sortname: 'sortordering',
sortorder: 'asc',
shrinkToFit: true,
autowidth: true,
viewrecords: true,
multiselect: false,
imgpath: "lib/basic/images",
caption: "Testing 123"
});
网格与我添加的数据看起来很棒,我现在只需要对其进行排序并管理状态更改......
感谢您的任何建议!
编辑#1:我一直在忙着尝试和学习什么是最好的。到目前为止,这是我所知道的:
1) $('#mygrid').trigger("reloadGrid") 不适用于“loadonce”/“本地”数据。如果您正在这样做,它用于从主机获取/刷新数据。
2)我在任何更改后成功采取的唯一方法是调用 jQuery("#mygrid").jqGrid('sortGrid',"sortordering",false); 但是,我必须调用它两次 :-( 因为每次调用都会切换方向(升序或降序),就像我单击了列一样。无法在“sortGrid”调用中指定方向 - 应该是我的附加参数观点...
3) 对于更改数据,我需要使用 jQuery("#mygrid").jqGrid('setRowData',...); 并且可能在那之后诉诸
4)删除数据我需要使用 jQuery("#mygrid").jqGrid('delRowData',...);
我的下一个任务是找出正确的方法来找到我想要更改的行的 rowID,希望不要遍历所有这些,但如果我必须这样做,我会这样做......
编辑#2:我现在了解 rowID 的重要性,这很有帮助!正如我在这里解释的那样,您也可以指定一个列值作为 rowID 值(最好是唯一的!),这使得以后引用该行变得非常容易......所以,当新信息到达时,您需要编辑 (setRowData) 或删除 (delRowData),将此列的值作为 setRowData 或 delRowData 的 rowID 参数传递,然后将整个对象(作为新数据)传递给您。如果您不想在网格中看到这个“键”,只需将其隐藏即可。要将此列指定为隐藏列并在 colModel 规范中指定为 rowID(将主键更改为数据中的任何属性名称):
{name:'primarykey',index:'primarykey', key: true, hidden:true}
顺便说一句 - 在我上面的示例中,我昨天尝试使用“排序顺序”列作为键,但是虽然它始终是唯一的,但它实际上会随着时间的推移而变化,因此它不适合作为键的候选:true 属性.