1

我是 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 属性.

4

2 回答 2

0

试试这个,

插入后更改并sortname: 'sortordering',重新加载网格。所以网格总是会在加载时和插入后对asc中的A列数据进行排序sortname: 'a',$('#mygrid').trigger("reloadGrid")

我不明白列排序的用途是什么。

于 2013-03-08T03:22:29.713 回答
0

看起来您将被设置为:

$('#GridName').jqGrid().sortGrid('ColumnName',true);

如果您想在刚刚设置的列的 colModel 中更改该列的默认排序方向:

firstsortorder: 'desc',
于 2013-03-08T14:21:11.103 回答