2013-03-30 2 views
0

У меня есть этот PHP-код, который я использую метод getdocuments, который подключается к веб-службе, я пропускаю лимит, номер страницы и дополнительный фильтр, и он возвращает массив данных дополнительно к общему количеству записей и номер страницыКак указать общее количество записей и страницу в php jqgrid

Я хочу показать результат в jqgrid, я хочу привести, например, 20 записей, и когда пользователь перейдет на следующую страницу, принесите следующие 20 записей.

<?php 

//ini_set("display_errors","1"); 
require_once 'grid/jq-config.php'; 
// include the jqGrid Class 
require_once "grid/jqGrid.php"; 
// include the driver class 
require_once "grid/jqGridArray.php"; 

// include the calendar 
require_once "grid/jqCalendar.php"; 

// include the document class 
require_once "lib/document.php"; 
// include heler.php which contain some helper functions 
require_once "lib/helper.php"; 
// create the array connection 
$conn = new jqGridArray(); 
// Create the jqGrid instance 
$grid = new jqGridRender($conn); 
// prepare array that contains fileds name which user can filter on 
$fields = array("BatchNumber", "SenderCode","ReceiverCode","DocumentNumber","DocumentType","InResponse","SubmitDate"); 


if(get_magic_quotes_gpc()){ 
    $d = stripslashes($_REQUEST["filters"]); 
}else{ 
    $d = $_REQUEST["filters"]; 
} 
$d = json_decode($d); 

for($i = 0; $i < count($d->rules); $i++){ 
    foreach ($fields as $value) { 
     if($d->rules[$i]->field == $value){ 
      $option[$value] == $d->rules[$i]->data; 
     } 
    } 
} 


if(isset($_GET["page"])){ 
$option["PageNumber"] = $_GET["page"]; 
} 
else{ 
    $option["PageNumber"] = 1; 
} 

if(isset($_GET["rows"])){ 
    $option["Limit"] = $_GET["rows"]; 
} 
else{ 
    $option["Limit"] = LIMIT_DOCUMENT; 
} 



$results = Document::getDocuments($option); 
$arrResult = _object_to_array($results); 


$documents = $arrResult["Documents"]["DocumentDataModel"]; 
$totalCount = $arrResult["TotalCount"] ; 
$totalPages = ceil($totalCount/ $option["Limit"]); 
// Always you can use SELECT * FROM data1 
$grid->SelectCommand = "SELECT BatchNumber, SenderCode ,ReceiverCode , DocumentNumber, DocumentType, InResponse, SubmitDate,LastModifiedDate FROM documents"; 
$grid->dataType = 'json'; 
$grid->setPrimaryKeyId('BatchNumber'); 

$grid->setColModel(); 

//enable subgrid 
// Set the parameters for the subgrid 
$grid->setSubGrid("subgrid_document_attachments.php", 
     array('File Name'), 
     array(60), 
     array('left')); 




// Enable toolbar searching 
$grid->toolbarfilter = true; 
$grid->setFilterOptions(array("stringResult"=>TRUE)); 

$grid->setUrl('grid_documents.php'); 



$grid->setGridOptions(array(
    "width" => 1124, 
    "height" => 400, 
    "rowList"=>array(10,20,30,40,50,100), 
    "sortname"=>"id", 
    "caption" => "Documents", 
    "total" => $arrResult["TotalPages"], 
    "records" => $arrResult['TotalCount'], 
    "page" => $arrResult['PageNumber'], 
)); 

$grid->setColProperty("BatchNumber", array("label"=>"Batch Number")); 
$grid->setColProperty("SubmitDate", array(
    "formatter"=>"date", 
    "formatoptions"=>array("srcformat"=>"Y-m-d H:i:s","newformat"=>"m/d/Y") 
    ) 
); 
// format the last modified date 
$grid->setColProperty("LastModifiedDate", array(
    "formatter"=>"date", 
    "formatoptions"=>array("srcformat"=>"Y-m-d H:i:s","newformat"=>"m/d/Y") 
    ) 
); 

// add date picker to submit date 
$grid->setDatepicker("SubmitDate",array("buttonOnly"=>FALSE)); 
$grid->datearray = array('SubmitDate'); 




// Enable navigator 
$grid->navigator = true; 
// Enable search 
$grid->setNavOptions('navigator', array("excel"=>TRUE,"add"=>false,"edit"=>false,"del"=>false,"view"=>false,"csv"=>FALSE, "pdf"=>false)); 
// Activate single search 
$grid->setNavOptions('search',array("multipleSearch"=>false)); 
// Enjoy 

$grid->renderGrid('#grid','#pager',true, null, null, true,true); 

?> 

Я осмотрела запрос HTTP на поджигатель, { "записи": 20, "страница": 1, "всего": 1}, а сетка просто отображать 20 записей с 1 страницы. Я хочу, чтобы он отображал 20 записей и включал разбиение на страницы, чтобы я мог нажать следующий и принести следующие 20 записей. Я хочу, чтобы эти значения были чем-то вроде {"total": "56", "page": "1", "records": "560"

+0

Таким образом, вы хотите иметь возможность просматривать страницы через записи? – Mark

+0

@Mark да, я хочу, чтобы иметь возможность записывать записи по страницам, но без получения всех записей каждый запрос, я имею в виду принести 20 записей из функции веб-службы, включить разбивку на страницы, когда пользователь нажимает следующую страницу, приносит следующие 20 записей. – Kamal

+0

. решить проблему? – Mark

ответ

0

jqGrid передаст всю информацию вашему веб-сервису, получить правильную страницу данных, которые необходимо отобразить. Индекс сортировки (sidx), порядок сортировки (sord), страница (страница) и строки (строки).

Контроллер/веб-служба может получить эту информацию, а затем получить соответствующие данные из вашего набора данных.

 public ActionResult getGridData(string sidx, string sord, int page, int rows, bool _search, string filters) { 
    ... 
    var pagedDataset = fullDataset.OrderBy(sidx + " " + sord).Skip((page - 1) * rows).Take(rows); 

    //then format the pagedDataset for the jqGrid and pass it back. 
Смежные вопросы