2013-05-01 3 views
1

J'ai un jqGrid qui n'utilise pas l'option loadonce: true. Le serveur gère le tri de manière dynamique au fur et à mesure que chaque requête est envoyée. La seule chose est que chaque page montre les mêmes données. Lorsque je clique sur un en-tête de colonne, les données sont triées de manière appropriée, mais je n'arrive pas à afficher les différentes pages.jqgrid pager n'affiche pas les données

Voici la fonction qui gère le tri. Il est fondamentalement la même chose que http://www.trirand.com/jqgridwiki/doku.php?id=wiki:first_grid & s [] = Sidx sauf postgres au lieu de mysql

function popGrid($conn){ 
    $page = $_POST['page']; 
    $limit = $_POST['rows']; 
    $sidx = $_POST['sidx']; 
    $sord = $_POST['sord']; 
    $sqlCount = $_POST['sqlCount']; 
    $sqlSelect = $_POST['sqlSelect']; 
    $sqlSelect2 = $_POST['sqlSelect2']; 
    $sqlSelect3 = $_POST['sqlSelect3']; 
    $label1 = $_POST['label1']; 
    $label2 = $_POST['label2']; 
    $lbl1 = $_POST['lbl1']; 
    $lbl2 = $_POST['lbl2']; 
    $lbl3 = $_POST['lbl3']; 

    if(!$sidx){ $sidx = 1; } 

    $query = pg_query($conn,$sqlCount); 
    $row = pg_fetch_row($query); 
    $count = $row[0]; 

    if($count > 0 && $limit > 0){ $total_pages = ceil($count/$limit); } 
    else{ $total_pages = 0; } 

    if($page > $total_pages){ $pages = $total_pages; } 

    $start = $limit*page - $limit; 

    if($start < 0){ $start = 0; } 

    header("Content-type: text/xml;charset=utf-8"); 

    $s = "<?xml version='1.0' encoding='utf-8'?> 
     <rows> 
     <page>".$page."</page> 
     <total>".$total_pages."</total> 
     <records>".$count."</records>"; 

    $sqlSelect .= " ORDER BY $sidx $sord LIMIT $limit OFFSET $start "; 
    $query = pg_query($conn,$sqlSelect); 
    while($row = pg_fetch_row($query)){ 
     $s .= "<row id='".$row[0]."'>"; 
     if($lbl1){ $s .= "<cell>$lbl1</cell>"; } 
     $s .= "<cell>".$row[0]."</cell> 
       <cell>".$row[1]."</cell>"; 
     if($label1){ $s.= "<cell>$label1</cell>"; } 
     $s .= "<cell>".$row[2]."</cell> 
       <cell>".$row[3]."</cell> 
       <cell>".$row[4]."</cell> 
       <cell>".$row[5]."</cell> 
       <cell>".$row[6]."</cell> 
       <cell>".$row[7]."</cell> 
       <cell>".$row[8]."</cell> 
       <cell>".$row[9]."</cell> 
       <cell>".$row[10]."</cell> 
       <cell>".$row[11]."</cell> 
       <cell>".$row[12]."</cell> 
       <cell>".$row[13]."</cell> 
       <cell>".$row[14]."</cell> 
       <cell>".$row[15]."</cell> 
       </row>"; 
    } 
    if($sqlSelect2){ 
     $sqlSelect2 .= " ORDER BY $sidx $sord LIMIT $limit OFFSET $start "; 
     $query = pg_query($conn,$sqlSelect2); 
     while($row = pg_fetch_row($query)){ 
      $s .= "<row id='".$row[0]."'>"; 
      if($lbl2){ $s .= "<cell>$lbl2</cell>"; } 
      $s .= " <cell>".$row[0]."</cell> 
        <cell>".$row[1]."</cell>"; 
      if($label2){ $s .= "<cell>$label2</cell>"; } 
      $s .= "<cell>".$row[2]."</cell> 
        <cell>".$row[3]."</cell> 
        <cell>".$row[4]."</cell> 
        <cell>".$row[5]."</cell> 
        <cell>".$row[6]."</cell> 
        <cell>".$row[7]."</cell> 
        <cell>".$row[8]."</cell> 
        <cell>".$row[9]."</cell> 
        </row>"; 
     } 
    } 
    if($sqlSelect3){ 
     $sqlSelect3 .= " ORDER BY $sidx $sord LIMIT $limit OFFSET $start "; 
     $query = pg_query($conn,$sqlSelect3); 
     while($row = pg_fetch_row($query)){ 
      $s .= "<row id='".$row[0]."'>"; 
      if($lbl3){ $s .= "<cell>$lbl3</cell>"; } 
      $s .= " <cell>".$row[0]."</cell> 
        <cell>".$row[1]."</cell>"; 
      if($label2){ $s .= "<cell>$label2</cell>"; } 
      $s .= "<cell>".$row[2]."</cell> 
        <cell>".$row[3]."</cell> 
        <cell>".$row[4]."</cell> 
        <cell>".$row[5]."</cell> 
        <cell>".$row[6]."</cell> 
        <cell>".$row[7]."</cell> 
        </row>";    
     } 
    } 
    $s .= "</rows>"; 
    echo $s; 

} 

Et voici la grille, dans le cas où c'est le problème:

$('#lst_users').jqGrid({ 
    url: 'hours_func.php', 
    dataType: 'xml', 
    mtype: 'POST', 
    postData: { 
     action: 'popGrid', 
     sqlCount: sqlCount, 
     sqlSelect: sqlSelect 
    }, 
    colNames:['ID','LOGIN ID','PASSWORD','FIRST NAME','LAST NAME','EMAIL','ADMIN'], 
    colModel:[ 
     { name: 'id', 
      required: false, 
      editable: false, 
     }, 
     { name: 'login_id', 
      editoptions: { 
       maxlength: 4 
      } 
     }, 
     { name: 'password', 
      editoptions: { 
       maxlength: 30 
      } 
     }, 
     { name: 'fname', 
      editoptions: { 
       maxlength: 20 
      } 
     }, 
     { name: 'lname', 
      editoptions: { 
       maxlength: 30 
      } 
     }, 
     { name: 'email', 
      required: false, 
      editoptions:{ 
       maxlength: 30 
      } 
     }, 
     { name: 'admin', 
      editoptions: { 
       dataInit: function(elem){ 
        $(elem).mask("~"); 
       } 
      } 
     },  
    ], 
    cmTemplate:{ 
     align: 'center', 
     colwidth: 80, 
     editable: true, 
     required: true, 
    }, 
    caption: 'Users', 
    pager:'#pgr_users', 
    editurl: 'hours_func.php', 
    loadonce: false, 
}).navGrid('#pgr_users', 
    //include all buttons 
    { search: false, 
    }, 
    //edit options 
    { bSubmit: "Edit", 
     width: 350, 
     recreateForm: true, 
     recreateFilter: true, 
     closeOnEscape: true, 
     editData: { 
      action: 'grdUsers', 
      id: function(){ 
       var id = $('#lst_users').jqGrid('getGridParam','selrow'); 
       var val = $('#lst_users').jqGrid('getCell',id,'id'); 
       return val; 
      } 
     }, 
    }, 
    //add options 
    { bSubmit: "Add", 
     width: 350, 
     recreateForm: true, 
     recreateFilter: false, 
     closeOnEscape: true, 
     editData: { action: 'grdUsers' } 
    }, 
    //delete options 
    { recreateForm: false, 
     recreateFilter: false, 
     closeOnEscape: true, 
     delData: { 
      action: 'grdUsers', 
      id: function() { 
       var sel_id = $('#lst_users').jqGrid('getGridParam','selrow'); 
       var value = $('#lst_users').jqGrid('getCell', sel_id, 'id'); 
       return value; 
      } 
     } 
    }, 
    //search options 
    {}, 
    //view options 
    {} 
); 

Répondre

2

La façon dont vous êtes configuré la pagination sera traitée sur le côté serveur. Si vous utilisez Firebug ou quelque chose de similaire, vous pouvez voir que le jqGrid enverra des informations à votre contrôleur vous permettant de filtrer vers la page correcte. Votre contrôleur gère déjà le tri des données. Vous n'avez plus qu'à utiliser les informations de pagination pour récupérer la bonne page de données.

Le code ci-dessous pour C# mais il servira d'exemple:

Votre contrôleur recevra les informations suivantes du poste de jqGrid sur la demande de page

GetGridData(string sidx, string sord, int page, int rows, bool _search, string filters) 
{ 
.... 

Vous pouvez alors utiliser cette information pour filtrer quelle page de données que le jqGrid demande comme je le fais dans cet exemple.

... 
var pagedQuery = DataSet.OrderBy(sidx + " " + sord).Skip((page - 1) * rows).Take(rows).ToList(); 
... 
+0

Je me sens comme un noob. J'ai géré le tri très bien, mais je n'ai pas réussi à mettre un $ sur une de mes variables php (la variable $ page) :(merci d'essayer d'aider Techniquement, votre avis était bon pour le problème que je * pensais * j'avais Qu'est-ce que le protocole d'acceptation dans ce cas? Je ne veux juste pas induire en erreur quiconque viendra à cette page à l'avenir – user

+1

@MWall Eh bien, j'ai répondu à la question que vous posez et le marquer correctement permettrait de le trouver dans le futur si quelqu'un a le problème que vous avez décrit ci-dessus. – Mark

Questions connexes