jqGrid与本地排序数据,如何正确手动添加、更改、删除行

jqGrid与本地排序数据,如何正确手动添加、更改、删除行,jqgrid,Jqgrid,我是jqGrid的新手,但我学得很快 我使用jqGrid处理本地数据。它显示某些对象的状态,并且这些对象正在实时更改。我通过基于comet的API接收状态更改,这些更改需要我在表中添加/更改/删除行。数据需要按隐藏的“sortorder”列进行排序。我认为,这使得静态排序更容易 所以我不使用“data”参数,我不“加载”任何数据,我一次添加一行 我在考虑每次插入时,可以在每次插入后使用行,或者更好的做法是遍历表数据中的项,直到结束,或者找到一个比我要添加的项大的项(通过这个sortorder值)

我是jqGrid的新手,但我学得很快

我使用jqGrid处理本地数据。它显示某些对象的状态,并且这些对象正在实时更改。我通过基于comet的API接收状态更改,这些更改需要我在表中添加/更改/删除行。数据需要按隐藏的“sortorder”列进行排序。我认为,这使得静态排序更容易

所以我不使用“data”参数,我不“加载”任何数据,我一次添加一行

我在考虑每次插入时,可以在每次插入后使用行,或者更好的做法是遍历表数据中的项,直到结束,或者找到一个比我要添加的项大的项(通过这个sortorder值)。然后在这一行之前添加新的一个。目前,我将它们全部添加到第1行,每个对象如下所示:

  jQuery("#mygrid").jqGrid('addRowData',1, obj);
所以我看到了它们,它们看起来很棒,但它们还没有按正确的顺序排列

删除(我认为)相当容易。我还没到那里

不过,变化呢?数据的更改可能包括“sortorder”值的更改,因此我希望在每次更改后重新调用数据。我相信我可以将这个隐藏列定义为排序列,当数据更改时,会更改底层数据。有没有一种简单的方法可以让网格对它所拥有的行进行“重新排序”?我试过了 $(“#mygrid”).trigger(“reloadGrid”)但这并没有诉诸任何手段。。。 在使用上面的'addRowData'调用加载初始数据之后,但没有任何效果。数据保持不变

我走对了吗?是否有一个示例,它通过编程方式添加行、更改行、删除行,使用网格真正只是为了显示事物的当前排序状态

这是我在$(document.ready()中创建的网格定义

html:

我添加的数据使网格看起来很棒,我现在只需要对其进行排序并管理状态更改

谢谢你的建议

编辑#1:我一直在忙着尝试,学习什么是最好的。以下是我目前所知道的:

1) $(“#mygrid”)。触发器(“重载网格”)不用于“loadonce”/“local”数据。它用于从主机获取/刷新数据(如果您正在这样做的话)

2) 在任何改变后,我成功求助的唯一方法就是打电话 jQuery(“#mygrid”).jqGrid('sortGrid',“sortordering”,false);但是,我必须调用它两次:-(因为每次调用sort都会切换方向(升序或降序),就像我单击列一样。在“sortGrid”调用中无法指定方向-我认为应该是一个附加参数

3) 要更改数据,我需要使用jQuery(“#mygrid”).jqGrid('setRowData',…);之后可能会去度假

4) 要删除数据,我需要使用jQuery(“#mygrid”).jqGrid('delRowData',…)

我的下一个任务是找出正确的方法来找到我想要更改的行的rowID,希望不要遍历所有行,但如果必须的话,我会这样做

编辑#2: 我现在明白了rowID的重要性,这很有帮助!正如我在这里解释的,您可以指定一个列值作为rowID值(最好是唯一的!),这使得以后引用该行变得非常容易。。。因此,当新信息到达时,您需要编辑(setRowData)或删除(delRowData),将此列的值作为setRowData或delRowData的rowID参数传递,然后整个对象(作为新数据)和您都已设置。如果不想在网格中看到此“键”,只需将其隐藏即可。要将其指定为colModel规范中的隐藏列和rowID(将primarykey更改为数据中的任何属性名称):

顺便说一句——在我上面的例子中,我昨天尝试使用“sortordering”列作为键,但尽管它总是唯一的,但它实际上可以随着时间的推移而改变,因此它不是键:true属性的好候选

试试这个

sortname:'sortordering',
更改为
sortname:'a',
并在插入
$('#mygrid')后重新加载网格。触发器(“重新加载网格”)
。因此,网格将始终在加载时和插入后对asc中的A列数据进行排序


我不明白列排序有什么用。

看起来您将被设置为:

$('#GridName').jqGrid().sortGrid('ColumnName',true);
如果您想在刚刚设置的列的colModel中更改该列的默认排序方向:

firstsortorder: 'desc',

实际上,我想显示a、b、c、d列,但这种“排序”是我指定列的方式,当按此列排序时,行的顺序是正确的。使用jqGrid可能有更好的方法,例如使用自定义排序函数。但我现在就是这样做的……我接受你的答案,因为它肯定回答了如何排序,我一开始就错了。我昨晚就猜出来了。今天我将再次编辑更多我错过的细节,以使所有的工作。
$('#GridName').jqGrid().sortGrid('ColumnName',true);
firstsortorder: 'desc',