summaryrefslogtreecommitdiff
path: root/framework/Web/UI/WebControls/TListBox.php
diff options
context:
space:
mode:
authorxue <>2005-12-22 21:22:22 +0000
committerxue <>2005-12-22 21:22:22 +0000
commit5c0517b7748dcfae1264d28df7ea111a67bd3aa4 (patch)
treed3756f95c16e09f2404bd8d7859d10f7aee1b000 /framework/Web/UI/WebControls/TListBox.php
parentda7bb7a797e298418a8b45580bba6d50073fa09f (diff)
Diffstat (limited to 'framework/Web/UI/WebControls/TListBox.php')
-rw-r--r--framework/Web/UI/WebControls/TListBox.php58
1 files changed, 55 insertions, 3 deletions
diff --git a/framework/Web/UI/WebControls/TListBox.php b/framework/Web/UI/WebControls/TListBox.php
index 79afc133..4aabbbac 100644
--- a/framework/Web/UI/WebControls/TListBox.php
+++ b/framework/Web/UI/WebControls/TListBox.php
@@ -6,14 +6,17 @@ class TListBox extends TListControl implements IPostBackDataHandler
{
$rows=$this->getRows();
$writer->addAttribute('size',"$rows");
- $writer->addAttribute('name',$this->getUniqueID());
+ if($this->getSelectionMode()==='Multiple')
+ $writer->addAttribute('name',$this->getUniqueID().'[]');
+ else
+ $writer->addAttribute('name',$this->getUniqueID());
parent::addAttributesToRender($writer);
}
protected function onPreRender($param)
{
parent::onPreRender($param);
- if($this->getSelectionMode()==='Multiple' && $this->getEnabled(true))
+ if($this->getEnabled(true))
$this->getPage()->registerRequiresPostData($this);
}
@@ -21,7 +24,56 @@ class TListBox extends TListControl implements IPostBackDataHandler
{
if(!$this->getEnabled(true))
return false;
- // ensure DataBound???
+ $selections=isset($values[$key])?$values[$key]:null;
+ $this->ensureDataBound();
+ if($selections!==null)
+ {
+ $items=$this->getItems();
+ if($this->getSelectionMode()==='Single')
+ {
+ $selection=is_array($selections)?$selections[0]:$selections;
+ $index=$items->findIndexByValue($selection,false);
+ if($this->getSelectedIndex()!==$index)
+ {
+ $this->setSelectedIndex($index);
+ return true;
+ }
+ else
+ return false;
+ }
+ if(!is_array($selections))
+ $selections=array($selections);
+ $list=array();
+ foreach($selections as $selection)
+ $list[]=$items->findIndexByValue($selection,false);
+ $list2=$this->getSelectedIndices();
+ $n=count($list);
+ $flag=false;
+ if($n===count($list2))
+ {
+ sort($list,SORT_NUMERIC);
+ for($i=0;$i<$n;++$i)
+ {
+ if($list[$i]!==$list2[$i])
+ {
+ $flag=true;
+ break;
+ }
+ }
+ }
+ else
+ $flag=true;
+ if($flag)
+ $this->setSelectedIndices($list);
+ return $flag;
+ }
+ else if($this->getSelectedIndex()!==-1)
+ {
+ $this->clearSelection();
+ return true;
+ }
+ else
+ return false;
}
public function raisePostDataChangedEvent()