JQGrid addRowData rowId始终为零

时间:2017-01-26 03:10:24

标签: javascript jquery jqgrid

我正在使用 jqGrid 4.4.4V ,我有两个网格让我们说grid1和grid2, 当我从grid1向grid2添加多行时,行id更新如0,1,...但是当我添加单行时,每个id都从' 0' .So开始,如果我多次这样做,所有rowIds都会像' 0'只要。有没有办法让rowIds始终是唯一的。

注意:数据不是手动添加到网格,而是从sql获取。以下是两个网格的代码。

GRID1:



 $("#grid1").jqGrid({
            url: "/.......some handler path",
            datatype: 'json',
            contentType: "application/json; charset-utf-8",
            mtype: 'Get',
            colNames: ['Val ID', 'Val Name', 'Description', 'Dept', 'Vam', 'Venue', 'Venue', 'Solution', 'Method', 'Type'],
            colModel: [
                    { name: 'valId', index: 'valId', hidden: true },
                    { name: 'valName', index: 'valName', formatter: Namefield, width: 400 },
                    { name: 'description', index: 'description', width: 300 },
                    { name: 'dep', index: 'dep', width: 300 },
                    { name: 'vam', index: 'vam', width: 300 },
                    { name: 'venueId', index: 'venueId', hidden: true },
                    { name: 'venue', index: 'venue', width: 250 },
                    { name: 'solution', index: 'solution', width: 400 },
                    { name: 'Method', index: 'Method', width: 300 },
                    { name: 'Type', index: 'Type', hidden: true },
            ],
            pager: $('#pager'),
            key:true,
            rowNum: 10,
            rowList: [10, 20, 30, 40],
            height: '100%',
            viewrecords: true,
            caption: '',
            sortname: 'Val Name',
            sortorder: "desc",
            emptyrecords: 'No records to display',
            autowidth: true,
            multiselect: true,
            multiselectWidth: 50,
            jsonReader: {
                root: "rows",
                page: "page",
                total: "total",
                records: "records",
                repeatitems: false,
                Id: "0"
            }
   });




grid2:



 $("#grid2").jqGrid({
                datatype: 'function',
                mtype: 'Post',
                colNames: ['Val ID', 'Val Name', 'Description', 'Dept', 'Vam', 'Venue ID', 'Venue', 'Solution', 'Method', 'Type'],
                colModel: [
                        { name: 'valId', index: 'valId', hidden: true },
                        { name: 'valName', index: 'valName', formatter: Namefield, width: 400 },
                        { name: 'description', index: 'description', width: 300 },
                        { name: 'dep', index: 'dep', width: 300 },
                        { name: 'vam', index: 'vam', width: 300 },
                        { name: 'venueId', index: 'venueId', hidden: true },
                        { name: 'venue', index: 'venue', width: 250 },
                        { name: 'solution', index: 'solution', width: 400 },
                        { name: 'Method', index: 'Method', width: 300 },
                        { name: 'Type', index: 'Type', hidden: true },
{ name: 'delete', index: 'delete', width: 50, formatter: Close, align: 'center' }
                ],
                pager: $('#pager'),
                key:true,
                rowNum: 10,
                rowList: [10, 20, 30, 40],
                height: '100%',
                viewrecords: true,
                caption: '',
                sortname: 'Val Name',
                sortorder: "desc",
                emptyrecords: 'No records to display',
                autowidth: true,
                multiselect: true,
                multiselectWidth: 50,
                jsonReader: {
                    root: "rows",
                    page: "page",
                    total: "total",
                    records: "records",
                    repeatitems: false,
                    Id: "0"
                }
       });




我在下面使用add和del方法,



        var selRowIdsArray = [];
        var myGrid = $("#grid1");
        var SelectedGrid = $('#grid2');
        //get no of selected rows count
        var selRowIds = $("#grid1").jqGrid('getGridParam', 'selarrrow');
        if (selRowIds.length !== 0) {
            if (selRowIdsArray.length == 0) {
                selRowIdsArray.push.apply(selRowIdsArray, selRowIds);
            }
            for (i = 0; i < selRowIdsArray.length; i++) {
                selRowIdsInt = selRowIdsArray[i];
                var selRowId = myGrid.getRowData(selRowIdsInt);
                SelectedGrid.jqGrid('addRowData', i, selRowId);
                myGrid.jqGrid('delRowData', selRowIdsInt);
            }
        }
&#13;
&#13;
&#13;

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您很好地理解什么是rowid以及jqGrid的idPrefix选项是什么,那么问题的解决方案可能非常简单。它是相应HTML id的{​​{1}}元素的<tr>属性值,用于显示数据。 jqGrid的内部实现是这样的,jqGrid 必须<table>分配给网格的每一行,这对应于数据。严格建议在每个项目中包含唯一的id属性。它可以是来自数据库的本机id或某些复合键,如id,它从后端保存有关本机ID的完整信息。我建议您从the picture检查the article

您可以将ID设置为id1 + "_" + id2之外的任何其他名称。如果您使用id的{​​{1}}选项,并且repeatitems: false是唯一ID的名称,那么您应该使用

jsonReader

告知jqGrid。与您一样,包含valId默认值的任何其他属性是不必要的。 jsonReader: { id: "valId" } 的任何其他属性(例如jsonReader(而不是jsonReader))将被忽略。之后,您可以从网格中删除不需要的隐藏列Id ,从而在网格的id元素中保存相同的信息。

如果您使用网格编辑

,我建议再添加一个选项
valId

该选项将<td>属性重命名为prmNames: { id: "valId" } ,以便在编辑网格时发送。因此,您可以继续使用id代替valId

接下来你应该明白rowid可能与id(valId)不同。如果页面上有多个网格,则严格建议使用id。甚至在你使用的jqGrid(4岁版本)的复古版本4.4.4上也支持它。例如,您可以在第一个网格中使用valId,在第二个网格中使用idPrefix阻止HTML页面上的id dupplicates ,因为rowid将使用相应的id前缀从id(idPrefix: "g1_")构建,两个网格都不同。

在理解了rowid的含义之后,应该清楚如何将所选行从一个网格移动到另一个网格。声明

idPrefix: "g2_"

为您提供所选行的rowid(第一个网格的valId)和您使用的前缀var selRowIds = $("#grid1").jqGrid('getGridParam', 'selarrrow'); var idPrefix1 = $("#grid1").jqGrid('getGridParam', 'idPrefix'); 。您可以使用idPrefix去除前缀idPrefix1以获取行数据,并使用$.jgrid.stripPref将相同数据添加到第二个网格,使用相同的ID

getRowData

addRowData会自动使用第二个网格的var i, id, item; for (i = 0; i < selRowIds.length; i++) { id = $.jgrid.stripPref(idPrefix1, selRowIds[i]); item = myGrid.jqGrid("getRowData", id); SelectedGrid.jqGrid("addRowData", id, item); }

最后,我建议你多久使用复古版4.4.4 dead 。我建议你使用free jqGrid的当前版本(4.13.6) - 这是我从2014年底开始开发的jqGrid的分支。如果因为使用了错误的NuGet而安装了4.4.4包jQuery.jqGrid,然后你应该卸载包并安装另一个包:free-jqGrid