[ Index ]
 

Code source de PRADO 3.0.6

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/framework/Web/UI/WebControls/ -> TDropDownListColumn.php (source)

   1  <?php
   2  /**
   3   * TDropDownListColumn class file
   4   *
   5   * @author Qiang Xue <qiang.xue@gmail.com>
   6   * @link http://www.pradosoft.com/
   7   * @copyright Copyright &copy; 2006 PradoSoft
   8   * @license http://www.pradosoft.com/license/
   9   * @version $Id: TDropDownListColumn.php 1451 2006-09-30 13:10:16Z xue $
  10   * @package System.Web.UI.WebControls
  11   */
  12  
  13  Prado::using('System.Web.UI.WebControls.TDataGridColumn');
  14  Prado::using('System.Web.UI.WebControls.TDropDownList');
  15  
  16  /**
  17   * TDropDownListColumn class
  18   *
  19   * TDropDownListColumn represents a column that is bound to a field in a data source.
  20   * The cells in the column will be displayed using the data indexed by
  21   * {@link setDataTextField DataTextField}. You can customize the display by
  22   * setting {@link setDataTextFormatString DataTextFormatString}.
  23   *
  24   * If {@link setReadOnly ReadOnly} is false, TDropDownListColumn will display cells in edit mode
  25   * with dropdown lists. Otherwise, a static text is displayed.
  26   * The currently selected dropndown list item is specified by the data indexed with
  27   * {@link setDataValueField DataValueField}.
  28   *
  29   * There are two approaches to specify the list items available for selection.
  30   * The first approach uses template syntax as follows,
  31   * <code>
  32   *   <com:TDropDownListColumn ....>
  33   *     <com:TListItem Value="1" Text="first item" />
  34   *     <com:TListItem Value="2" Text="second item" />
  35   *     <com:TListItem Value="3" Text="third item" />
  36   *   </com:TDropDownListColumn>
  37   * </code>
  38   * The second approach specifies a data source to be bound to the dropdown lists
  39   * by setting {@link setListDataSource ListDataSource}. Like generic list controls,
  40   * you may also want to specify which data fields are used for item values and texts
  41   * by setting {@link setListValueField ListValueField} and
  42   * {@link setListTextField ListTextField}, respectively.
  43   * Furthermore, the item texts may be formatted by using {@link setListTextFormatString ListTextFormatString}.
  44   * Note, if you specify {@link setListDataSource ListDataSource}, do it before
  45   * calling the datagrid's dataBind().
  46   *
  47   * The dropdown list control in the TDropDownListColumn can be accessed by one of
  48   * the following two methods:
  49   * <code>
  50   * $datagridItem->DropDownListColumnID->DropDownList
  51   * $datagridItem->DropDownListColumnID->Controls[0]
  52   * </code>
  53   * The second method is possible because the dropdown list control created within the
  54   * datagrid cell is the first child.
  55   *
  56   * @author Qiang Xue <qiang.xue@gmail.com>
  57   * @version $Id: TDropDownListColumn.php 1451 2006-09-30 13:10:16Z xue $
  58   * @package System.Web.UI.WebControls
  59   * @since 3.0.4
  60   */
  61  class TDropDownListColumn extends TDataGridColumn
  62  {
  63      private $_stateLoaded=false;
  64      private $_dataBound=false;
  65      private $_listControl=null;
  66  
  67  	public function __construct()
  68      {
  69          $this->_listControl=new TDropDownList;
  70      }
  71  
  72      /**
  73       * Loads items from viewstate.
  74       * This method overrides the parent implementation by loading list items
  75       * @param mixed state values
  76       */
  77  	public function loadState($state)
  78      {
  79          parent::loadState($state);
  80          $this->_stateLoaded=true;
  81          if(!$this->_dataBound)
  82              $this->_listControl->getItems()->loadState($this->getViewState('Items',null));
  83      }
  84  
  85      /**
  86       * Saves items into viewstate.
  87       * This method overrides the parent implementation by saving list items
  88       */
  89  	public function saveState()
  90      {
  91          $this->setViewState('Items',$this->_listControl->getItems()->saveState(),null);
  92          return parent::saveState();
  93      }
  94  
  95      /**
  96       * Adds object parsed from template to the control.
  97       * This method adds only {@link TListItem} objects into the {@link getItems Items} collection.
  98       * All other objects are ignored.
  99       * @param mixed object parsed from template
 100       */
 101  	public function addParsedObject($object)
 102      {
 103          // Do not add items from template if items are loaded from viewstate
 104          if(!$this->_stateLoaded && ($object instanceof TListItem))
 105          {
 106              $object->setSelected(false);
 107              $index=$this->_listControl->getItems()->add($object);
 108          }
 109      }
 110  
 111      /**
 112       * @return string the field of the data source that provides the text content of the column.
 113       */
 114  	public function getDataTextField()
 115      {
 116          return $this->getViewState('DataTextField','');
 117      }
 118  
 119      /**
 120       * Sets the field of the data source that provides the text content of the column.
 121       * If this is not set, the data specified via {@link getDataValueField DataValueField}
 122       * will be displayed in the column.
 123       * @param string the field of the data source that provides the text content of the column.
 124       */
 125  	public function setDataTextField($value)
 126      {
 127          $this->setViewState('DataTextField',$value,'');
 128      }
 129  
 130      /**
 131       * @return string the formatting string used to control how the bound data will be displayed.
 132       */
 133  	public function getDataTextFormatString()
 134      {
 135          return $this->getViewState('DataTextFormatString','');
 136      }
 137  
 138      /**
 139       * @param string the formatting string used to control how the bound data will be displayed.
 140       */
 141  	public function setDataTextFormatString($value)
 142      {
 143          $this->setViewState('DataTextFormatString',$value,'');
 144      }
 145  
 146      /**
 147       * @return string the field of the data source that provides the key selecting an item in dropdown list.
 148       */
 149  	public function getDataValueField()
 150      {
 151          return $this->getViewState('DataValueField','');
 152      }
 153  
 154      /**
 155       * Sets the field of the data source that provides the key selecting an item in dropdown list.
 156       * If this is not present, the data specified via {@link getDataTextField DataTextField} (without
 157       * applying the formatting string) will be used for selection, instead.
 158       * @param string the field of the data source that provides the key selecting an item in dropdown list.
 159       */
 160  	public function setDataValueField($value)
 161      {
 162          $this->setViewState('DataValueField',$value,'');
 163      }
 164  
 165      /**
 166       * @return boolean whether the items in the column can be edited. Defaults to false.
 167       */
 168  	public function getReadOnly()
 169      {
 170          return $this->getViewState('ReadOnly',false);
 171      }
 172  
 173      /**
 174       * @param boolean whether the items in the column can be edited
 175       */
 176  	public function setReadOnly($value)
 177      {
 178          $this->setViewState('ReadOnly',TPropertyValue::ensureBoolean($value),false);
 179      }
 180  
 181      /**
 182       * @return Traversable data source to be bound to the dropdown list boxes.
 183       */
 184  	public function getListDataSource()
 185      {
 186          return $this->_listControl->getDataSource();
 187      }
 188  
 189      /**
 190       * @param Traversable|array|string data source to be bound to the dropdown list boxes.
 191       */
 192  	public function setListDataSource($value)
 193      {
 194          $this->_listControl->setDataSource($value);
 195      }
 196  
 197      /**
 198       * @return string the data field used to populate the values of the dropdown list items. Defaults to empty.
 199       */
 200  	public function getListValueField()
 201      {
 202          return $this->getViewState('ListValueField','');
 203      }
 204  
 205      /**
 206       * @param string the data field used to populate the values of the dropdown list items
 207       */
 208  	public function setListValueField($value)
 209      {
 210          $this->setViewState('ListValueField',$value,'');
 211      }
 212  
 213      /**
 214       * @return string the data field used to populate the texts of the dropdown list items. Defaults to empty.
 215       */
 216  	public function getListTextField()
 217      {
 218          return $this->getViewState('ListTextField','');
 219      }
 220  
 221      /**
 222       * @param string the data field used to populate the texts of the dropdown list items
 223       */
 224  	public function setListTextField($value)
 225      {
 226          $this->setViewState('ListTextField',$value,'');
 227      }
 228  
 229      /**
 230       * @return string the formatting string used to control how the list item texts will be displayed.
 231       */
 232  	public function getListTextFormatString()
 233      {
 234          return $this->getViewState('ListTextFormatString','');
 235      }
 236  
 237      /**
 238       * @param string the formatting string used to control how the list item texts will be displayed.
 239       */
 240  	public function setListTextFormatString($value)
 241      {
 242          $this->setViewState('ListTextFormatString',$value,'');
 243      }
 244  
 245      /**
 246       * Initializes the specified cell to its initial values.
 247       * This method overrides the parent implementation.
 248       * It creates a textbox for item in edit mode and the column is not read-only.
 249       * Otherwise it displays a static text.
 250       * The caption of the button and the static text are retrieved
 251       * from the datasource.
 252       * @param TTableCell the cell to be initialized.
 253       * @param integer the index to the Columns property that the cell resides in.
 254       * @param string the type of cell (Header,Footer,Item,AlternatingItem,EditItem,SelectedItem)
 255       */
 256  	public function initializeCell($cell,$columnIndex,$itemType)
 257      {
 258          parent::initializeCell($cell,$columnIndex,$itemType);
 259          if(!$this->_dataBound && $this->_listControl->getDataSource()!==null)
 260          {
 261              $this->_listControl->setDataTextField($this->getListTextField());
 262              $this->_listControl->setDataValueField($this->getListValueField());
 263              $this->_listControl->setDataTextFormatString($this->getListTextFormatString());
 264              $this->_listControl->dataBind();
 265              $this->_dataBound=true;
 266          }
 267          switch($itemType)
 268          {
 269              case TListItemType::EditItem:
 270                  if(!$this->getReadOnly())
 271                  {
 272                      $listControl=clone $this->_listControl;
 273                      $cell->getControls()->add($listControl);
 274                      $cell->registerObject('DropDownList',$listControl);
 275                      $control=$listControl;
 276                  }
 277                  else
 278                      $control=$cell;
 279                  $control->attachEventHandler('OnDataBinding',array($this,'dataBindColumn'));
 280                  break;
 281              case TListItemType::Item:
 282              case TListItemType::AlternatingItem:
 283              case TListItemType::SelectedItem:
 284                  if($this->getDataTextField()!=='' || $this->getDataValueField()!=='')
 285                      $cell->attachEventHandler('OnDataBinding',array($this,'dataBindColumn'));
 286                  break;
 287          }
 288      }
 289  
 290      /**
 291       * Databinds a cell in the column.
 292       * This method is invoked when datagrid performs databinding.
 293       * It populates the content of the cell with the relevant data from data source.
 294       */
 295  	public function dataBindColumn($sender,$param)
 296      {
 297          $item=$sender->getNamingContainer();
 298          $data=$item->getDataItem();
 299          if(($valueField=$this->getDataValueField())!=='')
 300              $value=$this->getDataFieldValue($data,$valueField);
 301          else
 302              $value='';
 303          if(($textField=$this->getDataTextField())!=='')
 304          {
 305              $text=$this->getDataFieldValue($data,$textField);
 306              if($valueField==='')
 307                  $value=$text;
 308              $formatString=$this->getDataTextFormatString();
 309              $text=$this->formatDataValue($formatString,$text);
 310          }
 311          else
 312              $text=$value;
 313          if($sender instanceof TTableCell)
 314              $sender->setText($text);
 315          else if($sender instanceof TDropDownList)
 316              $sender->setSelectedValue($value);
 317      }
 318  }
 319  
 320  ?>


Généré le : Sun Feb 25 21:07:04 2007 par Balluche grâce à PHPXref 0.7