jqgrid inlinenav - 自定义行ID和删除

时间:2013-06-04 16:12:13

标签: jqgrid jqgrid-inlinenav

每行在我们的数据库中都有一个与jqgrid行id不同的id。如何在保存行时发送此lineid?

另外,有没有办法删除一行?

到目前为止,这是我的代码:

var mydata = [

              {
                        lineItemId: "785",
                productSku:"n123",
                productName:"hello there",
                pieces:"123",
                value:"23.00",
                line:"123"
              }
              ,
              {
                        lineItemId: "803",
                productSku:"n1234",
                productName:"hello there",
                pieces:"123",
                value:"23.00",
                line:"123"
              }               
            ];    

var colNames = ['SKU','Product Name', 'Pieces','Total Value','Line Number'];

var colModel = [
  {name:'productSku', index:'productSku', width:10, sorttype: 'text', editable:true},
  {name:'productName', index:'productName', width:60, editable:true},
  {name:'pieces', index:'pieces', width:10, sorttype: 'int', editable:true, formatter: 'integer'},
  {name:'value', index:'value', width:10, sorttype: 'int', editable:true, formatter: 'number'},
  {name:'line', index:'line', width:10, sorttype: 'int', editable:true, formatter: 'integer', formatoptions:{thousandsSeparator: ""}}
          ];

initOrdersJqGrid("orderContent", mydata, '<xsl:value-of select="$datapath/OrderId"/>', colNames, colModel, "sku", "desc");

var orderLineOptions = {
          keys: true,
          aftersavefunc: function (rowid, response, options) {
            // only update page if orderis is nil i.e. a new order
            if($('#orderidlabel').text() == "") {
              log('saving order line item from order with no id yet.');
              var dummy = $('<div />').html(response.responseText);
              var id = dummy.find('#orderId').val();
              $('#orderidlabel').text(id);
              $('#orderId').val(id);
              $('button[value="Save Order"]').trigger('click');
            }
          }
        }

    function initOrdersJqGrid(id, data, orderid, colNames, colModel, defaultSortColumn, defaultSortOrder) {
        $("#" + id + "Table")
        .jqGrid({
        datatype: "local",
        data: data,
        colNames: colNames,
        colModel: colModel,
        localReader: { id: "lineItemId"},
        pager: '#' + id + 'Pager',
        autowidth: true,
        gridview: true,
        autoencode: true,
        height: "auto",
        forceFit: true,
        shrinkToFit: true,  //Width of columns should be expressed in integers which add to 100
        sortname: defaultSortColumn,
        sortorder: defaultSortOrder,
        url: "fs/servlet/CS",
        editurl: "CS?action=com.agistix.webinterface.controllers.OrderIC,saveLineItems&orderId=" + orderid
      })
      .jqGrid('navGrid',"#" + id + "Pager",{edit:false,add:false,del:false,search: false, refresh: false})
      .jqGrid('inlineNav',"#" + id + "Pager", { addParams: { addRowParams: orderLineOptions }, editParams: orderLineOptions});

    }

1 个答案:

答案 0 :(得分:2)

如果您使用datatype: "local",则data参数指定的输入数据数组中的项应具有附加属性id,该值指定{的值{1}}网格的每一行(id)的属性。如果您希望使用另一个rowsid属性名称,可以使用<tr>来指定它。例如,localReader选项通知jqGrid从localReader: { id: "Id" }属性获取行(rowid)的id属性的值。如果您的数据项目应如下所示

Id

{ Id: 76453 productSku:"n123", productName:"hello there", pieces:"123", value:"23.00", line:"123" } 属性的值必须是唯一的。

如果网格中已有一些列包含来自某个数据库表的id,则不需要使用id属性添加相同的值。而不是你可以只在列中id。 jqGrid只允许将key: true放在key: true一个项中。

行ID的一个常见问题是重要的是要理解。如果您需要在页面上放置更多的网格,或者如果您需要将Subgrid用作网格,那么您仍然可能遇到一个问题。数据库中的ID在中是唯一的,但是在多个表中可以具有相同的ID。另一方面,HTML元素的ID(用于行的包含colModel元素)在整个页面上必须是唯一的

要解决此问题,可以使用jqGrid的<tr>选项。例如,数据库中有idPrefix列用于数据库中表的主键。在这种情况下,您将整数作为rowid的原生ID。值可以是第一个网格中的INT IDENTITY35。按使用情况40,分配给行(至idPrefix: "g1_"元素)的ID将为<tr>"g1_3""g1_5"。因此,"g1_40"对第一个网格的使用和另一个值如idPrefix: "g1_"可以解决潜在的id重复问题。重要的是jqGrid会自动从rowid中删除前缀idPrefix: "g2_",如果它向服务器发送一些数据(例如,如果你在网格中使用编辑)。人们可以区分“id”和“rowid”这两个名字。 “rowid”将始终为,前缀为。您可以使用idPrefix函数来剪切前缀。