2017-01-26 4 views
0

내가 있는 jqGrid 4.4.4V 함께 일하고, 나는 두 개의 격자 난의는 0,1와 같은 업데이트하는 행 ID를 GRID1에서 GRID2 여러 행을 추가 할 때 GRID1 및 GRID2, 을 가정 해 봅시다이 ,. ..하지만 하나씩 행을 추가 할 때마다 ID는 '0'부터 시작합니다. 이렇게 여러 번 수행하면 모든 행 ID는 '0'과 같을 것입니다. rowIds를 항상 고유하게 만들 수있는 방법이 있습니까?있는 jqGrid addRowData ROWID는 항상 0

참고 : 데이터가 그리드에 수동으로 추가되는 것이 아니라 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" 
 
       } 
 
     });

01,235,164 당신의 도움에 대한

내가 추가하고 아래 델 방법을 사용하고,

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

감사합니다.

답변

0

당신은 행렬식을 이해하고 jqGrid의 idPrefix 옵션을 이해하면 문제의 해결책이 매우 쉽습니다. id의 값이 <tr>이고 해당하는 HTML <table>의 요소가 데이터를 표시합니다. jqGrid의 내부 구현이 그렇기 때문에 jqGrid 이 데이터에 해당하는 그리드의 모든 행에 id을 할당해야합니다. 모든 항목에 고유 한 id 속성을 포함시키는 것이 좋습니다. 데이터베이스의 기본 ID이거나 id1 + "_" + id2과 같은 일부 복합 키는 백엔드의 원시 ID에 대한 전체 정보를 보유합니다. the article에서 the picture을 검사하는 것이 좋습니다.

다른 이름으로 id를 id으로 입력 할 수 있습니다. 당신이 jsonReaderrepeatitems: false 옵션을 사용하고 valId는 고유 ID의 이름 인 경우에, 당신은 그것에 대해있는 jqGrid를 알려

jsonReader: { id: "valId" } 

를 사용해야합니다. jsonReader의 다른 속성을 포함하여 기본값 인 값을 포함하면 불필요합니다. Id (id 대신)과 같은 jsonReader의 다른 속성은 무시됩니다. 그런 다음 불필요한 숨겨진 열 valId을 그리드에서 제거하면 동일한 정보가 <td>의 그리드 요소에 저장됩니다.

난 당신이 그리드

prmNames: { id: "valId" } 

의 편집을 사용하는 경우,이 옵션은 id 속성을 이름을 변경, 한 번 더 옵션을 추가 valId에, 그리드의 편집에 전송하는 것이 좋습니다. 따라서 id 대신 valId을 계속 사용할 수 있습니다.

다음으로는 rowid가 id (valId)와 같지 않을 수 있음을 이해해야합니다. 페이지에 그리드가 하나 이상있는 경우 idPrefix을 사용하는 것이 좋습니다. 사용중인 jqGrid (4 세 버전)의 역 버전 4.4.4에서도 지원됩니다. 예를 들어 첫 번째 모눈에서는 idPrefix: "g1_"을, 두 번째 모눈에서는 idPrefix: "g2_"을 사용할 수 있습니다. 은 HTML 페이지에서 id dupplicates을 방지합니다. 이는 rowid가 두 IDL 접두사가있는 ID (valId)에서 빌드되기 때문입니다.

rowid의 의미를 이해 한 후에는 선택한 행을 한 표에서 다른 표로 이동하는 방법이 명확해야합니다. 문

var selRowIds = $("#grid1").jqGrid('getGridParam', 'selarrrow'); 
var idPrefix1 = $("#grid1").jqGrid('getGridParam', 'idPrefix'); 

당신이 사용하는 선택된 행의 (첫 번째 그리드의 idPrefix 포함)의 ROWID와 접두사 idPrefix1을 제공합니다. 당신은 자동으로 두 번째 그리드의 idPrefix를 사용하는 동일한 ID

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

addRowData를 사용하여 행 데이터를 얻기 위해, 접두사를 제거하는 getRowData$.jgrid.stripPref을 사용할 수 있으며 두 번째 그리드에 동일한 데이터를 추가 할 수 addRowData를 사용 할 수 있습니다.

마지막으로, 나는 복고 버전 4.4.4를 사용하는 것을 권장합니다. 이것은 입니다. 수년간입니다. 나는 free jqGrid의 현재 버전 (4.13.6)을 사용할 것을 제안합니다. 이것은 jqGrid의 포크이며 2014 년 말부터 개발할 것입니다. 잘못된 NuGet 패키지 jQuery.jqGrid의 사용으로 인해 4.4.4를 설치 한 경우 패키지를 설치 제거한 후 다른 패키지 (free-jqGrid)를 설치해야합니다.

+0

명확한 설명을 보내 주셔서 감사합니다. 하지만 난 오류가 발생합니다 : ** "min.js 파일에서"정의되지 않은 "0 속성을 읽을 수 없습니다. 철저하게 검사했지만 이유를 찾지 못했습니다. 지원되지 않는 문제로 인해 그리드에로드 된 것으로 생각됩니다. – Virat

+0

@Virat : ** 현재 어떤 코드를 사용하고 있습니까? ** 오류가 발생하면'.min.js'를 사용하지 마십시오. '.src.js'는 소스 코드의 정확한 행을 보여줄 수 있습니다. 여기서'undefined'의 read 속성 '0'을 얻을 수 있습니다. 현재 사용중인 jqGrid의 버전 (여전히 4.4.4 또는 다른 버전)? 문제를 재현하고 디버깅 할 수있는 온라인 데모가 있습니까? – Oleg