2017-01-26 50 views
0

私はjqGrid 4.4.4Vで働いて、私は2つのグリッドiが行idをGRID1からgrid2に複数の行を追加するときGRID1とgrid2、 を言わせているよう0,1を更新しています、。 ..しかし、私はそれぞれのIDが '0'から始まっているので、私はこのような複数の回を行う場合、すべてのrowIdは '0'のようになります。 rowIdsを常にユニークにする方法はありますか?JQGrid addRowData ROWIDは常にゼロ

注:データはグリッドに手動で追加されておらず、SQLから取得されています。以下は2つのグリッドのコードです。

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

私は、以下のようにあなたの助けを

 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

問題が解決するかどうかは、ROWIDが何であるか分かり、jqGridのオプションがidPrefixの場合は非常に簡単です。それは対応するHTML <table><tr>要素のid属性の値で、データを表示します。 jqGridの内部実装はそうであるため、jqGrid がグリッドの各行にidを割り当てる必要があります。これはデータに対応しています。すべてのアイテムに固有のidプロパティを含めることを強くお勧めします。データベースからのネイティブID、またはid1 + "_" + id2のような複合キーで、バックエンドからのネイティブIDに関する完全な情報を保持します。 the articleからthe pictureを調べることをお勧めします。

idは、idという名前で置くことができます。あなたがjsonReaderrepeatitems: falseオプションを使用して、valIdは一意のIDの名前である場合は、そのことについてjqGridを知らせるために

jsonReader: { id: "valId" } 

を使用する必要があります。 jsonReaderの他のプロパティを含めて、のデフォルト値はで、これは不要です。 Ididではなく)のようなjsonReaderのその他のプロパティは無視されます。その後、不要な非表示列valIdをグリッドから削除すると、同じ情報がグリッドの<td>要素に保存されます。

私はあなたがグリッドの編集を使用している場合

prmNames: { id: "valId" } 

、1つのより多くのオプションを追加することをお勧めオプションはvalIdに、グリッドの編集に送って、idプロパティの名前を変更します。したがって、idの代わりにvalIdを引き続き使用することができます。

次に、rowidはid(valId)と同じではないことを理解する必要があります。ページに1つ以上のグリッドがある場合は、idPrefixを使用することを強くお勧めします。これは、jqGridのレトロなバージョン4.4.4(4歳バージョン)でもサポートされています。たとえば、最初のグリッドでidPrefix: "g1_"を使用し、2番目のグリッドでidPrefix: "g2_"を使用できます。 は、idがidページ(valId)からビルドされ、両方のグリッドで異なるため、HTMLページ上でid dupplicatesを防止します。

rowidの意味を理解した後は、選択した行をグリッドから別のグリッドに移動する方法が明確になっているはずです。声明

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

は、あなたが使用して、選択した行の(第1グリッドのidPrefix付き)のROWIDとプレフィックスidPrefix1を与えます。あなたは

は、自動的に第2のグリッドの idPrefixを使用します

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); 
} 
同じIDを使用して、行データを取得し、第2のグリッドに同じデータを追加する addRowDataを使用する接頭辞、 getRowDataを除去するために $.jgrid.stripPrefを使用することができます。

最後に、レターバージョン4.4.4の使用をお勧めします。死んだです。 free jqGridの最新バージョン(4.13.6)を使用することをお勧めします。これはjqGridのフォークで、2014年末から開発しています。間違ったNuGetパッケージjQuery.jqGridを使用して4.4.4をインストールした場合、パッケージをアンインストールし、別のパッケージをインストールする必要があります。free-jqGrid

+0

あなたの明確な説明をお寄せいただき、ありがとうございました。しかし、私はエラーが発生しています:** "min.jsファイルのプロパティ '0'をmin.jsファイルで読み取ることができません。徹底的にチェックしましたが、理由が見つからなかったため、サポートされていない問題が発生する可能性があります。 "Loading"として表示されなくなりました – Virat

+0

@Virat:**現在使用しているコードは?**エラーが発生した場合は、絶対に '.min.js'を使用しないでください。 '.src.js'はソースコードの正確な行を表示することができます。ここで' read property '0' 'undefined'というエラーが出ます。現在使用しているjqGridのバージョン(まだ4.4.4か他のもの)?あなたはデモをオンラインで持っていますか?問題を再現し、デバッグできますか? – Oleg

関連する問題