请注意此问题专门针对QCubed PHP框架的QDataGrid功能。 API documentation for QDataGrid没有描述回答此问题的任何功能。 QCubed samples site也没有解决方案。
问题:
有时QDataGrid有超过一百页。有没有办法跳转到多页数据网格中的特定页面?
例如,有一个包含167页的QDataGrid。 QPaginator只显示:
上一页| 1 2 3 4 5 6 7 8 ... 167 |下一步
因此,如果用户想要转到第100页,他必须进行大量点击。 (我知道QDataGrid可以被过滤和排序,但有时候它们没什么帮助。)
我想添加一个"跳转到页面" QTextbox,但是如何将QDataGrid告诉文本框中指定的页面?
答案 0 :(得分:1)
您可以在代码中使用此分页来获取
$this->auctionData = new QDataGrid($this);
$this->auctionData->CssClass = 'table table-striped';
$this->auctionData->UseAjax = true;
$this->auctionData->Paginator = new QPaginator($this->auctionData);
$this->auctionData->ItemsPerPage = 5;
$this->auctionData->SetDataBinder('BindDataGrid_ExistingAuctions', $this);
在SetDataBinder中调用该函数。
public function BindDataGrid_ExistingAuctions(){
$intCfglaneandrun = array();
$intCfglaneandrun = // your array goes here;
$this->auctionData->TotalItemCount = count($intCfglaneandrun);
$this->auctionData->DataSource = $intCfglaneandrun;
}
TotalItemCount采用分页和迭代中使用的计数,数据源将具有可以在数据网格中显示的数据。
答案 1 :(得分:0)
如果您从UI的角度来看,请指定一个Paginator,然后在网页上显示Paginator。请参阅qcu.be上的datagrids示例。
在内部,您可以通过添加具有正确偏移量和所需页面大小的QQ :: Limit子句在数据绑定器中执行此操作。
答案 2 :(得分:0)
我终于找到了一种使用qcubed来做到这一点的方法,也许它可以在将来帮助某人。基本上,我刚刚在Form_Create()函数中添加了一个QIntegerTextBox和一个QButton,并添加了一个动作来为QDataGrid的Paginator-> PageNumber属性设置一个值。像这样:
protected function Form_Create() {
parent::Form_Create();
// Instantiate the Meta DataGrid
$this->dtgSignatories = new SignatoryDataGrid($this);
// Style the DataGrid (if desired)
// Add Pagination (if desired)
$this->dtgSignatories->Paginator = new QPaginator($this->dtgSignatories);
$this->dtgSignatories->ItemsPerPage = __FORM_DRAFTS_FORM_LIST_ITEMS_PER_PAGE__;
// more code here
// to add columns to the datagrid
// page box
$this->intPage = new QIntegerTextBox($this);
$this->intPage->Width = 50;
$this->intPage->AddAction(new QEnterKeyEvent(), new QServerAction('btnGo_Click'));
// "go" button
$this->btnGo = new QButton($this);
$this->btnGo->Text = QApplication::Translate('Go');
$this->btnGo->AddAction(new QClickEvent(), new QAjaxAction('btnGo_Click'));
$this->btnGo->AddAction(new QClickEvent(), new QServerAction('btnGo_Click'));
$this->btnGo->CausesValidation = true;
}
protected function btnGo_Click($strFormId, $strControlId, $strParameter) {
$count = Signatory::CountAll();
$pages = ceil($count / __FORM_DRAFTS_FORM_LIST_ITEMS_PER_PAGE__);
if ($this->intPage->Text < 1) {
$this->intPage->Text = 1;
} elseif ($this->intPage->Text > $pages) {
$this->intPage->Text = $pages;
}
$this->dtgSignatories->Paginator->PageNumber = $this->intPage->Text;
$this->dtgSignatories->Refresh();
}