跳转到QDataGrid中的特定页面

时间:2015-01-14 18:51:07

标签: datagrid pagination qcubed

请注意此问题专门针对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告诉文本框中指定的页面?

3 个答案:

答案 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();
}