2010-05-10 7 views
2

Je crée un JQGrid à partir d'une table de base de données qui ne contient pas une seule clé primaire de champ. Par conséquent, le champ que je fournis en tant qu'ID n'est pas unique et le même champ existe en plusieurs lignes. Pour cette raison, lors de la transmission d'une référence aux données avec ondblClickRow à une fonction externe à la grille, j'ai besoin d'utiliser le numéro de référence et non l'identifiant.JQgrid - Récupère le numéro de ligne au lieu de l'ID

Pour tester, j'utilise ondblClickRow: function(id){alert($("#grid1").getInd('rowid'));},, et je devrais obtenir et alerte avec le numéro de ligne, sauf que cela ne fonctionne pas.

Je suis sur la documentation et ne peut pas comprendre ce que je fais mal ...

Toute aide serait grandement appréciée! Merci d'avance, Mario.

Bellow est ma grille complète:

jQuery(document).ready(function(){ 
var mygrid = jQuery("#grid1").jqGrid({ 
    datatype: 'xmlstring', 
    datastr : grid1RsXML, 
    width: 1024, 
    height: 500, 
    colNames:['DEVICE_ID','JOB_SIZE_IN_BYTES', 'USER_NAME','HOST_NAME','DAY_OF_WEEK','JOB_ID'], 
    colModel:[ 
       {name:'DEVICE_ID',index:'DEVICE_ID', width:55, sortable:true}, 
       {name:'JOB_SIZE_IN_BYTES',index:'JOB_SIZE_IN_BYTES', width:40, sortable:true}, 
       {name:'USER_NAME',index:'USER_NAME', width:60, sortable:true}, 
       {name:'HOST_NAME',index:'HOST_NAME', width:50,align:"right", sortable:true}, 
       {name:'DAY_OF_WEEK',index:'DAY_OF_WEEK', width:10, sortable:true}, 
       {name:'JOB_ID',index:'JOB_ID', width:30, sortable:true} 

      ], 
    rowNum:1000, 
    autowidth: true, 
    //rowList:[10,20,30], 
    rowList:[1], 
    pager: '#grid1Pager', 
    sortname: 'DEVICE_ID', 
    viewrecords: true, 
    rownumbers: true, 
    sortorder: "desc", 
    sortable: true, 
    gridview : true, 
    xmlReader: { root : "recordset", row: "record", repeatitems: false, id: "DEVICE_ID" }, 
    caption:"All Jobs - Double Click for detailed history", 
    ondblClickRow: function(id){alert($("#grid1").getInd('rowid'));}, 
    toolbar: [true,"top"], 
    url: grid1RsXML 
}); 

Répondre

5

Qu'est-ce que vous cherchez est déjà passé à l'événement, il vous suffit d'inclure plusieurs des paramètres disponibles dans votre déclaration de fonction:

ondblClickRow: function(id, iRow, iCol, e) { 
    alert(iRow); 
}, 
+0

+1 - Juste curieux, cela ne devrait pas avoir d'importance pour cette question particulière, mais que se passe-t-il? ens à iRow lorsque la grille est triée? Vraisemblablement, cela changerait pour correspondre au nouvel ordre des lignes? –

+0

Oui, ce serait le cas. Plutôt que de faire des choses basées sur la ligne, je ferais descendre la clé composite dans des colonnes cachées afin qu'elles puissent être utilisées pour les requêtes suivantes. –

2

La réponse à votre question principale vous donne great_llama, mais il me semble que vous avez un peu mal compris id comme une entrée XML utilisée par jqGrid. La valeur par défaut xmlReader a id: "[id]". Alors que vous venez de supprimer id: "DEVICE_ID" de la définition de xmlReader et placez id attribut dans vos données:

var grid1RsXML = "<?xml version='1.0' encoding='utf-8'?>"+ 
    "<recordset>"+ 
     "<rows>"+ 
      "<record id='1'>"+ 
       "<DEVICE_ID>data1</DEVICE_ID>"+ 
       "<JOB_SIZE_IN_BYTES>data2</JOB_SIZE_IN_BYTES>"+ 
       "<USER_NAME>data3</USER_NAME>"+ 
       "<HOST_NAME>data4</HOST_NAME>"+ 
       "<DAY_OF_WEEK>data5</DAY_OF_WEEK>"+ 
       "<JOB_ID>data6</JOB_ID>"+ 
      "</record>"+ 
      "<record id='2'>"+ 
       "<DEVICE_ID>data1</DEVICE_ID>"+ 
       "<JOB_SIZE_IN_BYTES>data2</JOB_SIZE_IN_BYTES>"+ 
       "<USER_NAME>data3</USER_NAME>"+ 
       "<HOST_NAME>data4</HOST_NAME>"+ 
       "<DAY_OF_WEEK>data5</DAY_OF_WEEK>"+ 
       "<JOB_ID>data6</JOB_ID>"+ 
      "</record>"+ 
      "<record id='3'>"+ 
       "<DEVICE_ID>data1</DEVICE_ID>"+ 
       "<JOB_SIZE_IN_BYTES>data2</JOB_SIZE_IN_BYTES>"+ 
       "<USER_NAME>data3</USER_NAME>"+ 
       "<HOST_NAME>data4</HOST_NAME>"+ 
       "<DAY_OF_WEEK>data5</DAY_OF_WEEK>"+ 
       "<JOB_ID>data6</JOB_ID>"+ 
      "</record>"+ 
     "</rows>"+ 
    "</recordset>"; 

donc vos données principales qui envoient votre serveur pourrait avoir une double rangée, mais si vous ajoutez juste id attribut qui peut être une ligne compteur vous pouvez résoudre votre problème. La valeur de l'attribut id ne doit pas être un nombre, vous pouvez utiliser n'importe quelle chaîne à la place. Si la nature de vos données le permet, vous pouvez produire un id unique sous la forme d'une chaîne composée de vos autres données.

1

Récemment, j'avais la même exigence, c'est-à-dire d'accéder aux données de ligne par numéro de ligne plutôt que par identifiant de ligne. Je n'ai aucun identifiant de ligne. Le code ci-dessous fonctionne pour moi. NOTE: Le nombre de lignes commence à partir de 1.

var rowNum=$("#grid1").getGridParam("selarrrow"); $("#grid1").getRowData(rowNum);

0

Je fais comme ceci:

ondblClickRow:function(rowid,iRow,iCol,e){var curPage =$("#gridTable").getGridParam("page");//current page var pageSize = $("#gridTable").getGridParam("rowNum");//records per pagevar count = parseInt((curPage-1)*pageSize) + parseInt(rowid);} 
Questions connexes