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

时间:2013-03-07 23:17:32

标签: jqgrid

我是jqGrid的新手,但我正在快速学习......

我正在使用jqGrid和本地数据。它显示某些对象的状态,并且它们正在实时更改。我通过基于彗星的API接收状态更改,这些更改要求我在表中添加/更改/删除行。数据需要按隐藏的"排序顺序排序"柱。我认为这使得更容易实现静态排序。

所以我没有使用"数据"参数,我不是"加载"任何数据,我一次添加一行。

我想要做每次插入,我可以在每次插入后使用行,或者更好地迭代表格数据中的项目,直到最后我或者找到一个更大的(按此排序值)比我添加的更大。然后在此行之前添加新的。目前我在第1行添加它们,每个对象都是这样的:

  jQuery("#mygrid").jqGrid('addRowData',1, obj);

所以我看到它们,它们看起来很棒,但它们的顺序还不正确。

删除(我认为)非常简单。我还没到那儿。

但是变化怎么样?数据的变化可能包括" sortorder"值,所以我希望在每次更改后使用数据。我相信我可以将此隐藏列定义为排序列,并在数据更改时更改基础数据。是否有一种简单的方法让网格重新排序"它有的行?我试过了     $(' #mygrid')。触发器(" 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')。触发器(" reloadGrid")不适用于" loadonce" /"本地"数据。它用于从主机获取/刷新数据,如果这是您正在做的事情。

2)我在改变后成功采取的唯一方法是致电 jQuery的("#mygrid&#34)的jqGrid。(' sortGrid'" sortordering",FALSE);但是,我必须调用它两次:-(因为每次调用TOGGLES方向(升序或降序)就像我点击了列一样。无法在' sortGrid'调用中指定方向 - 应该是我认为还有一个额外的参数......

3)为了改变数据,我需要使用jQuery(" #mygrid")。jqGrid(' setRowData',...);并可能在那之后采取行动

4)删除数据我需要使用jQuery(" #mygrid")。jqGrid(' delRowData',...);

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

编辑#2: 我现在明白了rowID的重要性,这有很大帮助!正如我在这里解释的那样,你可以指定一个列值作为rowID值(它最好是唯一的!)这使得以后很容易引用该行...所以,当新信息到达时你需要无论是编辑(setRowData)还是删除(delRowData),都将此列的值作为setRowData或delRowData的rowID参数传递,然后将整个对象(作为新数据)传递给您。如果你不想看到这个" key"在网格中,只需将其隐藏。要将此列指定为隐藏,并将其指定为colModel规范中的rowID(将主键更改为数据中属性名称):

   {name:'primarykey',index:'primarykey', key: true, hidden:true}

顺便一提 - 在上面的例子中,我昨天尝试使用" sortordering"列作为键,但它始终是唯一的,它实际上可以随时间变化,因此它不能成为key:true属性的良好候选者。

2 个答案:

答案 0 :(得分:0)

试试这个,

sortname: 'sortordering',更改为sortname: 'a',并在插入$('#mygrid').trigger("reloadGrid")后重新加载网格。因此,网格将始终在加载时和插入

之后在asc中对A列数据进行排序

我不明白列排序的用途。

答案 1 :(得分:0)

看起来您将被设置为:

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

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

firstsortorder: 'desc',