1

每一行在我们的数据库中都有一个与 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});

    }
4

1 回答 1

2

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

{
    Id: 76453
    productSku:"n123",
    productName:"hello there",
    pieces:"123",
    value:"23.00",
    line:"123"
}

财产的价值id必须是唯一的。

如果您在网格中已经有一些列包含来自某个数据库表的 id,则您不需要使用id属性添加相同的值。取而代之的是,您可以只key: true在列中。jqGridkey: true只允许放置.colModel

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

要解决这个问题,可以使用idPrefixjqGrid 的选项。例如,您INT IDENTITY在数据库中有列作为数据库中表的主键。在这种情况下,您将拥有整数作为 rowids 的本机 id。3例如,第一个网格中的值可以是 、540通过使用idPrefix: "g1_",分配给行(给<tr>元素)的 id 将是"g1_3", "g1_5", "g1_40". 因此,使用idPrefix: "g1_"第一个网格和另一个类似的值idPrefix: "g2_"可以解决潜在的 id 重复问题。idPrefix如果 jqGrid将一些数据发送到服务器(例如,如果您在网格中使用编辑),那么jqGrid 会自动从 rowid 中去除前缀​​,这一点很重要。可以区分“id”和“rowid”名称。“rowids”将永远是带前缀。您可以使用$.jgrid.stripPref功能来削减前缀。

于 2013-06-05T13:08:43.373 回答