2013-05-01 2 views
1

У меня есть jqGrid, который не использует параметр loadonce: true. Сервер обрабатывает сортировку динамически по мере отправки каждого запроса. Единственное, что каждая страница показывает одни и те же данные. Когда я нажимаю на заголовок столбца, данные сортируются соответствующим образом, но я не могу показать разные страницы.jqgrid пейджер не показывает данные

Вот функция, которая обрабатывает сортировку. Это в основном так же, как http://www.trirand.com/jqgridwiki/doku.php?id=wiki:first_grid & s [] = sidx за исключением Postgres вместо 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; 

} 

А вот сетка, в случае, если в этом проблема:

$('#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 
    {} 
); 

ответ

2

Способ установки пейджинга будет обрабатываться на стороне сервера. Если вы используете Firebug или somthing, вы можете увидеть, что jqGrid отправит информацию вашему контроллеру, чтобы вы могли отфильтровать до нужной страницы. Контроллер уже обрабатывает сортировку данных, поэтому теперь вам просто нужно использовать информацию поискового вызова, чтобы захватить правильную страницу данных.

ниже код для C#, но он будет служить в качестве примера:

Ваш контроллер будет получить следующую информацию от должности jqGrid по запросу страницы

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

Вы можете использовать эту информацию для фильтрации той страницы данных, которую запрашивает jqGrid, как я делаю в этом примере.

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

Я чувствую себя таким нубом. Я отлично справлялся с сортировкой, но мне не удалось установить $ на одну из моих переменных php (переменная $ page) :(спасибо за попытку помочь. Технически ваши советы были полезны для проблемы, о которой я думал * Что такое протокол приема в этом случае? Я просто не хочу вводить в заблуждение всех, кто приходит на эту страницу в будущем. – user

+1

@MWall Ну, я ответил на вопрос, который вы встали, и правильность его маркировки позволила бы найти его в будущем если у кого-то возникла проблема, описанная выше. – Mark

Смежные вопросы