Subversion-Projekte lars-tiefland.prado

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?php

class Sample3 extends TPage
{
        private $_data=null;

        protected function getData()
        {
                if($this->_data===null)
                        $this->loadData();
                return $this->_data;
        }

        protected function loadData()
        {
                // We use viewstate keep track of data.
                // In real applications, data should come from database using an SQL SELECT statement.
                // In the following tabular data, field 'ISBN' is the primary key.
                // All update and delete operations should come with an 'id' value in order to go through.
                if(($this->_data=$this->getViewState('Data',null))===null)
                {
                        $this->_data=array(
                                array(
                                        'ISBN'=>'0596007124',
                                        'title'=>'Head First Design Patterns',
                                        'publisher'=>'O\'Reilly Media, Inc.',
                                        'price'=>29.67,
                                        'instock'=>true,
                                        'rating'=>4,
                                ),
                                array(
                                        'ISBN'=>'0201633612',
                                        'title'=>'Design Patterns: Elements of Reusable Object-Oriented Software',
                                        'publisher'=>'Addison-Wesley Professional',
                                        'price'=>47.04,
                                        'instock'=>true,
                                        'rating'=>5,
                                ),
                                array(
                                        'ISBN'=>'0321247140',
                                        'title'=>'Design Patterns Explained : A New Perspective on Object-Oriented Design',
                                        'publisher'=>'Addison-Wesley Professional',
                                        'price'=>37.49,
                                        'instock'=>true,
                                        'rating'=>4,
                                ),
                                array(
                                        'ISBN'=>'0201485672',
                                        'title'=>'Refactoring: Improving the Design of Existing Code',
                                        'publisher'=>'Addison-Wesley Professional',
                                        'price'=>47.14,
                                        'instock'=>true,
                                        'rating'=>3,
                                ),
                                array(
                                        'ISBN'=>'0321213351',
                                        'title'=>'Refactoring to Patterns',
                                        'publisher'=>'Addison-Wesley Professional',
                                        'price'=>38.49,
                                        'instock'=>true,
                                        'rating'=>2,
                                ),
                                array(
                                        'ISBN'=>'0735619670',
                                        'title'=>'Code Complete',
                                        'publisher'=>'Microsoft Press',
                                        'price'=>32.99,
                                        'instock'=>false,
                                        'rating'=>4,
                                ),
                                array(
                                        'ISBN'=>'0321278658 ',
                                        'title'=>'Extreme Programming Explained : Embrace Change',
                                        'publisher'=>'Addison-Wesley Professional',
                                        'price'=>34.99,
                                        'instock'=>true,
                                        'rating'=>3,
                                ),
                        );
                        $this->saveData();
                }
        }

        protected function saveData()
        {
                $this->setViewState('Data',$this->_data);
        }

        protected function updateBook($isbn,$title,$publisher,$price,$instock,$rating)
        {
                // In real applications, data should be saved to database using an SQL UPDATE statement
                if($this->_data===null)
                        $this->loadData();
                $updateRow=null;
                foreach($this->_data as $index=>$row)
                        if($row['ISBN']===$isbn)
                                $updateRow=&$this->_data[$index];
                if($updateRow!==null)
                {
                        $updateRow['title']=$title;
                        $updateRow['publisher']=$publisher;
                        $updateRow['price']=TPropertyValue::ensureFloat(ltrim($price,'$'));
                        $updateRow['instock']=TPropertyValue::ensureBoolean($instock);
                        $updateRow['rating']=TPropertyValue::ensureInteger($rating);
                        $this->saveData();
                }
        }

        protected function deleteBook($isbn)
        {
                // In real applications, data should be saved to database using an SQL DELETE statement
                if($this->_data===null)
                        $this->loadData();
                $deleteIndex=-1;
                foreach($this->_data as $index=>$row)
                        if($row['ISBN']===$isbn)
                                $deleteIndex=$index;
                if($deleteIndex>=0)
                {
                        unset($this->_data[$deleteIndex]);
                        $this->saveData();
                }
        }

        public function onLoad($param)
        {
                parent::onLoad($param);
                if(!$this->IsPostBack)
                {
                        $this->DataGrid->DataSource=$this->Data;
                        $this->DataGrid->dataBind();
                }
        }

        public function itemCreated($sender,$param)
        {
                $item=$param->Item;
                if($item->ItemType==='EditItem')
                {
                        // set column width of textboxes
                        $item->BookTitleColumn->TextBox->Columns=40;
                        $item->PriceColumn->TextBox->Columns=5;
                }
                if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem' || $item->ItemType==='EditItem')
                {
                        // add an aleart dialog to delete buttons
                        $item->DeleteColumn->Button->Attributes->onclick='if(!confirm(\'Are you sure?\')) return false;';
                }
        }

        public function editItem($sender,$param)
        {
                $this->DataGrid->EditItemIndex=$param->Item->ItemIndex;
                $this->DataGrid->DataSource=$this->Data;
                $this->DataGrid->dataBind();
        }

        public function saveItem($sender,$param)
        {
                $item=$param->Item;
                $this->updateBook(
                        $this->DataGrid->DataKeys[$item->ItemIndex],    // ISBN
                        $item->BookTitleColumn->TextBox->Text,                  // title
                        $item->PublisherColumn->TextBox->Text,                  // publisher
                        $item->PriceColumn->TextBox->Text,                              // price
                        $item->InStockColumn->CheckBox->Checked,                // instock
                        $item->RatingColumn->DropDownList->SelectedValue                // rating
                        );
                $this->DataGrid->EditItemIndex=-1;
                $this->DataGrid->DataSource=$this->Data;
                $this->DataGrid->dataBind();
        }

        public function cancelItem($sender,$param)
        {
                $this->DataGrid->EditItemIndex=-1;
                $this->DataGrid->DataSource=$this->Data;
                $this->DataGrid->dataBind();
        }

        public function deleteItem($sender,$param)
        {
                $this->deleteBook($this->DataGrid->DataKeys[$param->Item->ItemIndex]);
                $this->DataGrid->EditItemIndex=-1;
                $this->DataGrid->DataSource=$this->Data;
                $this->DataGrid->dataBind();
        }
}

?>