У меня есть сетка, которая должна быть отсортирована по щелчку заголовка столбца. Некоторые столбцы, такие как идентификатор, сортируются так же, как ожидалось, но некоторые столбцы, такие как дата при нажатии, хотя отправляют запрос на сервер и сортируются, но строки сортируются не очень хорошо. Я включил картину, чтобы изобразить этот сценарий Из картины, колонка времени не сортировать, как и ожидалось, последняя строка должна прийти раньше, чем при сортировке (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
Спасибо!
Я уже пробовал эту опцию, но проблема остается. Спасибо за ваш вклад. –