跳转到 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 采用分页和迭代中使用的计数,数据源将具有可以在数据网格中显示的数据。