2014-02-11 2 views
0

У меня есть сетка, которая должна быть отсортирована по щелчку заголовка столбца. Некоторые столбцы, такие как идентификатор, сортируются так же, как ожидалось, но некоторые столбцы, такие как дата при нажатии, хотя отправляют запрос на сервер и сортируются, но строки сортируются не очень хорошо. Я включил картину, чтобы изобразить этот сценарий sort Из картины, колонка времени не сортировать, как и ожидалось, последняя строка должна прийти раньше, чем при сортировке (JAN 24 до 28) ...JQ Grid, Сортировка не работает должным образом

Вот мой серверный код ..

//Get the requested page 
$page = $_GET['page']; 

//Get how many rows we want to have into the grid 
$limit = $_GET['rows']; 

// get index row - i.e. user click to sort. At first time sortname parameter - 
// after that the index from colModel 
$sidx = $_GET['sidx']; 

// sorting order - at first time sortorder 
$sord = $_GET['sord']; 

// if we not pass at first time index use the first column for the index or what you want 
if(!$sidx) $sidx =1; 

//array to translate the search type 
$ops = array(
    'eq'=>'=', //equal 
    'ne'=>'<>',//not equal 
    'lt'=>'<', //less than 
    'le'=>'<=',//less than or equal 
    'gt'=>'>', //greater than 
    'ge'=>'>=',//greater than or equal 
    'bw'=>'LIKE', //begins with 
    'bn'=>'NOT LIKE', //doesn't begin with 
    'in'=>'LIKE', //is in 
    'ni'=>'NOT LIKE', //is not in 
    'ew'=>'LIKE', //ends with 
    'en'=>'NOT LIKE', //doesn't end with 
    'cn'=>'LIKE', // contains 
    'nc'=>'NOT LIKE' //doesn't contain 
); 
function getWhereClause($col, $oper, $val){ 
    global $ops; 
    if($oper == 'bw' || $oper == 'bn') $val .= '%'; 
    if($oper == 'ew' || $oper == 'en') $val = '%'.$val; 
    if($oper == 'cn' || $oper == 'nc' || $oper == 'in' || $oper == 'ni') $val = '%'.$val.'%'; 
    return " WHERE $col {$ops[$oper]} '$val' "; 
} 

$where = ""; //if there is no search request sent by jqgrid, $where should be empty 
$searchField = isset($_GET['searchField']) ? $_GET['searchField'] : false; 
$searchOper = isset($_GET['searchOper']) ? $_GET['searchOper']: false; 
$searchString = isset($_GET['searchString']) ? $_GET['searchString'] : false; 
if ($_GET['_search'] == 'true') { 
    $where = getWhereClause($searchField,$searchOper,$searchString); 
} 

mysql_query("SET NAMES 'utf8'"); 

// calculate the number of rows for the query. We need this for paging the result 
$result = mysql_query("SELECT COUNT(*) AS count FROM renal_accessLog"); 
$row = mysql_fetch_array($result,MYSQL_ASSOC); 
$count = $row['count']; 

// calculate the total pages for the query 
if($count > 0 && $limit > 0) { 
       $total_pages = ceil($count/$limit); 
} else { 
       $total_pages = 0; 
} 

// if for some reasons the requested page is greater than the total 
// set the requested page to total page 
if ($page > $total_pages) $page=$total_pages; 

// calculate the starting position of the rows 
$start = $limit*$page - $limit; 

// if for some reasons start position is negative set it to 0 
// typical case is that the user type 0 for the requested page 
if($start <0) $start = 0; 

// the actual query for the grid data 
$SQL = "SELECT * FROM renal_accessLog ".$where." ORDER BY $sidx $sord LIMIT $start , $limit"; 
$result = mysql_query($SQL) or die("Couldn't execute query.".mysql_error()); 


$responce = new stdClass(); 
$responce->page = $page; 
$responce->total = $total_pages; 
$responce->records = $count; 
$i=0; 
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) 
{ 
    $responce->rows[$i]['id']=$row['id']; 

Вот мой код клиента стороны

$(function() { 
      $("#list").jqGrid({ 
       url:"grid_accessLog.php", 
       datatype: "json", 
       mtype: "GET", 
     colNames:["ID","Ip Address","User Info","Time","Page","Referrer","Search","User Agent","Notes"], 
       colModel: [ 
      { name: "id",index:"id", width: 55,search:true}, 
      { name: "ip_address",index:"ip_address",search:true, width: 90 }, 
      { name: "user_info",index:"user_info",search:true, width: 100}, 
      { name: "time",index:"time",search:true,sorttype:"text", width: 90}, 
      { name: "page",index:"page",search:true, width: 120}, 
      { name: "referrer",index:"referrer",search:true, width: 90 }, 
      { name: "search",index:"search",search:true, width: 90 }, 
      { name: "user_agent",index:"user_agent",search:true, width: 120 }, 
     { name: "notes",index:"notes",search:true, width: 120 } 
     ], 

     pager: "#pager", 
      rowNum: 30, 
      rowList: [10,20,30], 
      autowidth:true, 
      sortname: "id", 
      sortorder: "desc", 
      viewrecords: true, 
      autoencode: true, 
      caption: "Access Log", 
      height: 'auto' 

          }).navGrid("#pager", {search:true, edit:false,add:false,del:false,searchtext:"Search"}); 
              });//end ready 

Спасибо!

ответ

0

В вашем коде указан по умолчанию sorcolumn id. Изменить sortname: "id"sortname: "time"

+0

Я уже пробовал эту опцию, но проблема остается. Спасибо за ваш вклад. –

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