2013-06-04 4 views
1

각 행을 삭제할 수는있는 jqGrid 행 ID로 다른 우리의 DB에 ID가 있습니다. 어떻게 행을 저장할 때이 lineid를 보낼 수 있습니까?있는 jqGrid inlinenav - 사용자 정의 행 ID와

또한, 행을 삭제하는 방법은 무엇입니까?

이 내 코드는 지금까지 있습니다 :

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}); 

    } 
+0

rowid 문제의 원인은 대개 그리드의 데이터 채우기가 잘못되었습니다. 원시 데이터베이스 ID 인 열의 설명과 함께 사용하는'colModel'을 포함시킬 수 있습니까? 당신이 사용하는'data' 예제 (한 줄이면 충분합니다)를 포함시킬 수 있습니까? 데이터베이스에서 반환 된 데이터와 함께'datatype : "local"'을 사용하는 것은 이상합니다. – Oleg

+0

안녕하세요 @Oleg, 더 많은 코드로 질문을 업데이트했습니다. 각 행에 사용할 ID는 xml로 돌아옵니다.

+0

죄송합니다.하지만 'mydata'에 대해 잘못된 데이터를 게시했습니다.자바 스크립트 조각의 구문조차도 잘못되었습니다. XSL을 사용하여 데이터를 생성하는 경우 * 결과 데이터를 게시해야합니다. 게다가'colModel'은 어떤 열에 대해서도'key : true'를 포함하지 않습니다. 따라서 데이터'id' 속성에 데이터베이스의 id 값을 포함시켜야합니다 (예 :'LineItemId'의 값). – Oleg

답변

2

당신이 다음 data 매개 변수로 지정된 입력 데이터의 배열에서 항목의 id 속성의 값을 지정 추가 특성 id을 가져야한다 datatype: "local"를 사용하는 경우 그리드의 모든 행 (<tr>). rowsid 등록 정보의 다른 이름을 사용하려면 localReader을 사용하여 지정할 수 있습니다. 예를 들어, localReader: { id: "Id" } 옵션은 Id 특성에서 행 (rowids)의 값이 id 인 jqGrid에 알립니다. 경우 데이터의 항목

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

아래 id 속성의 값은 고유 필요 같은 BI해야한다. 당신은 이미 당신이 id 속성과 동일한 값을 추가 할 필요가 없습니다 일부 데이터베이스 테이블에서 ID를 포함하는 그리드에 약간의 열이있는 경우

. 대신 그 열에 key: true 수 있습니다. jqGrid는 을 에만 넣고colModel으로 설정합니다. 행의 ID와

하나 더 일반적인 문제는 이해하는 것이 중요합니다. 한 페이지에 하나 이상의 격자를 배치해야하거나 격자로 격자를 사용해야하는 경우 여전히 한 가지 문제가있을 수 있습니다. 데이터베이스의 ID는 테이블에서 고유하지만 하나는 여러 테이블에서 동일한 ID를 가질 수 있습니다. HTML 요소의 요소 (행에 사용 된 <tr> 요소 포함) 은 전체 페이지에서 고유해야합니다..

하나가있는 jqGrid의 idPrefix 옵션을 사용하여 문제를 해결합니다. 예를 들어 데이터베이스에있는 테이블의 기본 키에 대해 데이터베이스에 INT IDENTITY 열이 있습니다. 이 경우 정수는 rowid의 고유 ID로 사용됩니다. 값은 첫 번째 그리드에서 예를 들어 3, 5, 40 일 수 있습니다. 사용 idPrefix: "g1_" 그래피 ( <tr> 요소) 행에 할당 된 ID는 "g1_3", "g1_5", "g1_40" 것이다. 따라서 첫 번째 격자에 idPrefix: "g1_"을 사용하고 idPrefix: "g2_"과 같은 다른 값을 사용하면 잠재적 인 ID 중복 문제를 해결할 수 있습니다. jqGrid가 일부 데이터를 서버에 보내는 경우 (예 : 그리드에서 편집을 사용하는 경우) 접두사 idPrefix을 rowid에서 자동으로 제거하는 것이 중요합니다. 하나는 "id"와 "rowid"이름을 구별 할 수 있습니다. "rowids"는 접두사가있는 입니다. 접두사를 자르려면 $.jgrid.stripPref 함수를 사용할 수 있습니다.

+0

감사합니다. ID를 데이터 객체에 추가했습니다. 이제 id를 통해 "lineItemId"를 보내야합니다. localReader (위의 업데이트 된 코드 참조)를 추가하려했지만 여전히 "id"로 게시 됨 –

+2

@MarkSteggles : 여러분 환영합니다! 내가 필요한 것을 정확히 이해한다면 jqGrid의'prmNames : {id : "lineItemId"}'옵션을 사용해야한다. – Oleg

+0

고마워요! 그 트릭을 했어 –