From d602f32bf108ccf58df7880227dc64d2cfa33e13 Mon Sep 17 00:00:00 2001 From: xue <> Date: Wed, 1 Feb 2006 19:26:46 +0000 Subject: Modified TDataList demo 2 to make it more demonstrative. --- .../pages/Controls/Samples/TDataList/Sample2.page | 123 ++++++++++++--------- .../pages/Controls/Samples/TDataList/Sample2.php | 108 ++++++++++++------ 2 files changed, 144 insertions(+), 87 deletions(-) (limited to 'demos/quickstart/protected/pages/Controls/Samples/TDataList') diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.page b/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.page index 018aabfd..16adf66b 100644 --- a/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.page +++ b/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.page @@ -1,74 +1,79 @@

TDataList Sample 2

-

This demo shows a simple application of TDataList control.

-

TDataList allows you to show a list of data items (rows), edit, select and delete them.

+

This demo shows a simple application of TDataList control in maintaining a list of computer products. The application allows you to browse a list of inventory computer products, edit, select and delete them. +

+

+Be aware, for simplicity, this application does not do any input validation. In real applications, make sure user inputs are valid before saving them into databases. +

+ + -
Computer Parts
- - + + + +
-Parent->DataItem['id']%> - CommandName="select" - /> -<%#$this->Parent->DataItem['name']%> - - - -
+ Parent->DataItem['id']%> + CommandName="select" + /> + <%#$this->Parent->DataItem['name']%> + + + +
- - - - - + + + + + + + + + + -
IDNameQuantityPrice
<%#$this->Parent->DataItem['id'] %><%#$this->Parent->DataItem['name'] %><%#$this->Parent->DataItem['quantity'] %>$<%#$this->Parent->DataItem['price'] %>IDNameQuantityPrice
<%#$this->Parent->DataItem['id'] %><%#$this->Parent->DataItem['name'] %><%#$this->Parent->DataItem['quantity'] %>$<%#$this->Parent->DataItem['price'] %>
+ + +
- - -
@@ -76,7 +81,7 @@ - + @@ -102,6 +107,14 @@ /> + + + +
ID<%#$this->Parent->DataItem['id']%><%#$this->Parent->DataItem['id']%>
Name
ImportedParent->DataItem['imported'] %> + /> +
diff --git a/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.php b/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.php index ccc87498..cc15e27e 100644 --- a/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.php +++ b/demos/quickstart/protected/pages/Controls/Samples/TDataList/Sample2.php @@ -2,33 +2,77 @@ class Sample2 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. - if(($data=$this->getViewState('Data',null))===null) + // In real applications, data should come from database using an SQL SELECT statement. + // In the following tabular data, field 'id' 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) { - $data=array( - array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00), - array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00), - array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00), - array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00), - array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00), - array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00), - array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00), + $this->_data=array( + array('id'=>'ITN001','name'=>'Motherboard','quantity'=>1,'price'=>100.00,'imported'=>true), + array('id'=>'ITN002','name'=>'CPU','quantity'=>1,'price'=>150.00,'imported'=>true), + array('id'=>'ITN003','name'=>'Harddrive','quantity'=>2,'price'=>80.00,'imported'=>false), + array('id'=>'ITN004','name'=>'Sound card','quantity'=>1,'price'=>40.00,'imported'=>false), + array('id'=>'ITN005','name'=>'Video card','quantity'=>1,'price'=>150.00,'imported'=>true), + array('id'=>'ITN006','name'=>'Keyboard','quantity'=>1,'price'=>20.00,'imported'=>true), + array('id'=>'ITN007','name'=>'Monitor','quantity'=>2,'price'=>300.00,'imported'=>false), ); - $this->saveData($data); + $this->saveData(); + } + } + + protected function saveData() + { + $this->setViewState('Data',$this->_data); + } + + protected function updateProduct($id,$name,$quantity,$price,$imported) + { + // 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['id']===$id) + $updateRow=&$this->_data[$index]; + if($updateRow!==null) + { + $updateRow['name']=$name; + $updateRow['quantity']=TPropertyValue::ensureInteger($quantity); + $updateRow['price']=TPropertyValue::ensureFloat($price); + $updateRow['imported']=TPropertyValue::ensureBoolean($imported); + $this->saveData(); } - return $data; } - protected function saveData($data) + protected function deleteProduct($id) { - // In real applications, data should be saved to database. - $this->setViewState('Data',$data); + // 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['id']===$id) + $deleteIndex=$index; + if($deleteIndex>=0) + { + unset($this->_data[$deleteIndex]); + $this->saveData(); + } } - function onLoad($param) + public function onLoad($param) { parent::onLoad($param); if(!$this->IsPostBack) @@ -38,14 +82,15 @@ class Sample2 extends TPage } } - function editItem($sender,$param) + public function editItem($sender,$param) { + $this->DataList->SelectedItemIndex=-1; $this->DataList->EditItemIndex=$param->Item->ItemIndex; $this->DataList->DataSource=$this->Data; $this->DataList->dataBind(); } - function cancelItem($sender,$param) + public function cancelItem($sender,$param) { $this->DataList->SelectedItemIndex=-1; $this->DataList->EditItemIndex=-1; @@ -53,33 +98,32 @@ class Sample2 extends TPage $this->DataList->dataBind(); } - function updateItem($sender,$param) + public function updateItem($sender,$param) { $item=$param->Item; - $data=$this->Data; - $product=&$data[$item->ItemIndex]; - $product['name']=$item->ProductName->Text; - $product['price']=TPropertyValue::ensureFloat($item->ProductPrice->Text); - $product['quantity']=TPropertyValue::ensureInteger($item->ProductQuantity->Text); - $this->saveData($data); + $this->updateProduct( + $this->DataList->DataKeys[$item->ItemIndex], + $item->ProductName->Text, + $item->ProductPrice->Text, + $item->ProductQuantity->Text, + $item->ProductImported->Checked); $this->DataList->EditItemIndex=-1; - $this->DataList->DataSource=$data; + $this->DataList->DataSource=$this->Data; $this->DataList->dataBind(); } - function deleteItem($sender,$param) + public function deleteItem($sender,$param) { - $data=$this->Data; - array_splice($data,$param->Item->ItemIndex,1); - $this->saveData($data); + $this->deleteProduct($this->DataList->DataKeys[$param->Item->ItemIndex]); $this->DataList->SelectedItemIndex=-1; $this->DataList->EditItemIndex=-1; - $this->DataList->DataSource=$data; + $this->DataList->DataSource=$this->Data; $this->DataList->dataBind(); } - function selectItem($sender,$param) + public function selectItem($sender,$param) { + $this->DataList->EditItemIndex=-1; $this->DataList->DataSource=$this->Data; $this->DataList->dataBind(); } -- cgit v1.2.3