跳转到 QDataGrid 中的特定页面
Jump to a specific page in a QDataGrid
请注意这个问题专门针对 QCubed PHP 框架的 QDataGrid 功能。 API documentation for QDataGrid does not describe any feature that answers this question. The QCubed samples site 对此也没有解决方案。
问题:
有时一个QDataGrid 有一百多个页面。有没有办法跳转到多页数据网格中的特定页面?
例如,有一个 167 页的 QDataGrid。 QPaginator 只显示:
Previous | 1 2 3 4 5 6 7 8 ... 167 | Next
所以如果用户想要转到第 100 页,他必须进行大量的点击。 (我知道 QDataGrid 可以进行过滤和排序,但有时这些帮助不大)。
我正在考虑添加一个 "jump to page" QTextbox,但是我如何告诉 QDataGrid 到文本框中指定的页面?
如果你的意思是从UI的角度来看,分配一个Paginator,然后在网页上显示Paginator。请参阅 qcu.be.
中有关数据网格的示例
在内部,您可以在数据活页夹中添加一个 QQ::Limit 子句,其中包含所需页面的正确偏移量和大小。
我终于找到了使用 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();
}
您可以在您的代码中使用此分页来实现
$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 采用分页和迭代中使用的计数,数据源将具有可以在数据网格中显示的数据。
请注意这个问题专门针对 QCubed PHP 框架的 QDataGrid 功能。 API documentation for QDataGrid does not describe any feature that answers this question. The QCubed samples site 对此也没有解决方案。
问题:
有时一个QDataGrid 有一百多个页面。有没有办法跳转到多页数据网格中的特定页面?
例如,有一个 167 页的 QDataGrid。 QPaginator 只显示:
Previous | 1 2 3 4 5 6 7 8 ... 167 | Next
所以如果用户想要转到第 100 页,他必须进行大量的点击。 (我知道 QDataGrid 可以进行过滤和排序,但有时这些帮助不大)。
我正在考虑添加一个 "jump to page" QTextbox,但是我如何告诉 QDataGrid 到文本框中指定的页面?
如果你的意思是从UI的角度来看,分配一个Paginator,然后在网页上显示Paginator。请参阅 qcu.be.
中有关数据网格的示例在内部,您可以在数据活页夹中添加一个 QQ::Limit 子句,其中包含所需页面的正确偏移量和大小。
我终于找到了使用 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();
}
您可以在您的代码中使用此分页来实现
$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 采用分页和迭代中使用的计数,数据源将具有可以在数据网格中显示的数据。