/** * Generates the content in the data grid. * This method is invoked when <b>OnDataBinding</b> event is raised. * It builds up the data grid according to column definitions * data source. * This method should only used by control developers. * @param TEventParameter event parameter */ protected function onDataBinding($param) { parent::onDataBinding($param); $this->setViewState('Items', null, null); $this->removeBodies(); foreach ($this->items as $item) { $this->removeChild($item); } if (!is_null($this->header)) { $this->removeChild($this->header); $this->header = null; } if (!is_null($this->footer)) { $this->removeChild($this->footer); $this->footer = null; } if (!is_null($this->pager)) { $this->removeChild($this->pager); $this->pager = null; } $this->items->clear(); foreach ($this->columns as $column) { $column->dataBind(); } if (is_null($this->dataSource)) { return; } if ($this->isAllowPaging()) { $pageSize = $this->getPageSize(); $offset = $this->isAllowCustomPaging() ? 0 : $pageSize * $this->getCurrentPageIndex(); } else { $offset = 0; $pageSize = self::MAX_PAGE_SIZE; } $index = 0; $editIndex = $this->getEditItemIndex(); $selectedIndex = $this->getSelectedItemIndex(); $this->dataItemCount = 0; $dataSource = array(); foreach ($this->dataSource as $data) { $this->dataItemCount++; $dataSource[] = $data; if ($this->isAllowCustomPaging() && $this->dataItemCount > $offset + $pageSize) { break; } if ($this->dataItemCount <= $offset || $this->dataItemCount > $offset + $pageSize) { continue; } if ($index == 0 && $this->isAutoGenerateColumns()) { //foreach($this->autoColumns as $column) // $this->removeChild($column); $this->autoColumns->clear(); $columnIndex = 0; foreach ($data as $key => $value) { $column = pradoGetApplication()->createComponent('TBoundColumn', 'AutoColumn' . $columnIndex); $column->setHeaderText($key); $column->setDataField($key); $column->setSortExpression($key); $column->dataBind(); $this->autoColumns->add($column); $columnIndex++; } } $item = $this->createComponent('TDataGridItem', self::ID_ITEM . $index); if ($index == $editIndex) { $type = TDataGridItem::TYPE_EDIT_ITEM; } else { if ($index == $selectedIndex) { $type = TDataGridItem::TYPE_SELECTED_ITEM; } else { if ($index % 2) { $type = TDataGridItem::TYPE_ALTERNATING_ITEM; } else { $type = TDataGridItem::TYPE_ITEM; } } } $item->setType($type); $item->setData($data); $item->setItemIndex($index); $this->items->add($item); $this->initializeItem($item); $p = new TDataGridItemEventParameter(); $p->item = $item; $this->onItemCreated($p); $index++; } $this->setViewState('Items', $dataSource, array()); $this->header = $this->createComponent('TDataGridItem', self::ID_HEADER); $this->header->setType(TDataGridItem::TYPE_HEADER); $this->addBody($this->header); $this->initializeItem($this->header); $p = new TDataGridItemEventParameter(); $p->item = $this->header; $this->onItemCreated($p); $this->footer = $this->createComponent('TDataGridItem', self::ID_FOOTER); $this->footer->setType(TDataGridItem::TYPE_FOOTER); $this->addBody($this->footer); $this->initializeItem($this->footer); $p = new TDataGridItemEventParameter(); $p->item = $this->footer; $this->onItemCreated($p); if ($this->isAllowPaging()) { $this->pager = $this->createComponent('TDataGridItem', self::ID_PAGER); $this->pager->setType(TDataGridItem::TYPE_PAGER); $this->addBody($this->pager); $cell = $this->pager->createComponent('TTableCell'); $this->pager->addBody($cell); $p = new TDataGridItemEventParameter(); $p->item = $this->pager; $this->onItemCreated($p); $currentPage = $this->getCurrentPageIndex(); $pageCount = $this->getPageCount(); if ($currentPage >= $pageCount) { $currentPage = $pageCount - 1; } if ($currentPage < 0) { $currentPage = 0; } $this->setCurrentPageIndex($currentPage); $buttonCount = $this->getPagerButtonCount(); $fromPage = intval($currentPage / $buttonCount) * $buttonCount; $toPage = $fromPage + $buttonCount; if ($fromPage > 0) { $button = $cell->createComponent('TLinkButton'); $button->setText('...'); $button->setCommandName(self::CMD_PAGE); $button->setCommandParameter($fromPage - 1); $button->setCausesValidation(false); $cell->addBody($button); $cell->addBody(' '); } for ($i = $fromPage; $i < $toPage; ++$i) { if ($i >= $pageCount) { break; } if ($i == $currentPage) { $cell->addBody(strval($i + 1)); $cell->addBody(' '); } else { $button = $cell->createComponent('TLinkButton'); $button->setText(strval($i + 1)); $button->setCommandName(self::CMD_PAGE); $button->setCommandParameter($i); $button->setCausesValidation(false); $cell->addBody($button); $cell->addBody(' '); } } if ($toPage < $pageCount) { $button = $cell->createComponent('TLinkButton'); $button->setText('...'); $button->setCommandName(self::CMD_PAGE); $button->setCommandParameter($toPage); $button->setCausesValidation(false); $cell->addBody($button); } } }
/** * Parses and intantiates templates. * This method is invoked when <b>OnDataBinding</b> event is raised. * It parses and instantiates all assoicated templates for the * data listing control and raises related events. * This method should only used by control developers. * @param TEventParameter event parameter */ protected function onDataBinding($param) { parent::onDataBinding($param); $this->setViewState('Items', null, null); $this->removeChildren(); $this->removeBodies(); $this->items->clear(); $this->separators->clear(); $this->header = null; $this->footer = null; if (is_null($this->dataSource)) { return; } if (strlen($this->headerTemplate)) { $this->header = $this->createComponent('TDataListItem', self::ID_HEADER); $this->header->setType(TDataListItem::TYPE_HEADER); $this->header->instantiateTemplate($this->headerTemplate); $this->addBody($this->header); $p = new TDataListItemEventParameter(); $p->item = $this->header; $this->onItemCreated($p); } $selectedIndex = $this->getSelectedItemIndex(); $editIndex = $this->getEditItemIndex(); $count = 0; foreach ($this->dataSource as $key => $value) { if ($count > 0 && strlen($this->separatorTemplate)) { $separator = $this->createComponent('TDataListItem', self::ID_SEPARATOR . "{$count}"); $separator->setType(TDataListItem::TYPE_SEPARATOR); $separator->instantiateTemplate($this->separatorTemplate); $this->addBody($separator); $this->separators->add($separator); } $item = null; if ($count == $selectedIndex && strlen($this->selectedItemTemplate)) { $item = $this->createComponent('TDataListItem', self::ID_ITEM . "{$count}"); $item->setType(TDataListItem::TYPE_SELECTED_ITEM); $item->instantiateTemplate($this->selectedItemTemplate); } else { if ($count == $editIndex && strlen($this->editItemTemplate)) { $item = $this->createComponent('TDataListItem', self::ID_ITEM . "{$count}"); $item->setType(TDataListItem::TYPE_EDIT_ITEM); $item->instantiateTemplate($this->editItemTemplate); } else { if ($count % 2 == 1 && strlen($this->alternatingItemTemplate)) { $item = $this->createComponent('TDataListItem', self::ID_ITEM . "{$count}"); $item->setType(TDataListItem::TYPE_ALTERNATING_ITEM); $item->instantiateTemplate($this->alternatingItemTemplate); } else { if (strlen($this->itemTemplate)) { $item = $this->createComponent('TDataListItem', self::ID_ITEM . "{$count}"); $item->setType(TDataListItem::TYPE_ITEM); $item->instantiateTemplate($this->itemTemplate); } } } } if (!is_null($item)) { $item->setItemIndex($count); $item->setData($value); $this->items->add($item); $p = new TDataListItemEventParameter(); $p->item = $item; $this->onItemCreated($p); } $count++; } if (strlen($this->footerTemplate)) { $this->footer = $this->createComponent('TDataListItem', self::ID_FOOTER); $this->footer->setType(TDataListItem::TYPE_FOOTER); $this->footer->instantiateTemplate($this->footerTemplate); $this->addBody($this->footer); $p = new TDataListItemEventParameter(); $p->item = $this->footer; $this->onItemCreated($p); } }