diff options
Diffstat (limited to 'framework')
| -rw-r--r-- | framework/Web/UI/WebControls/TDropDownListColumn.php | 72 | 
1 files changed, 53 insertions, 19 deletions
diff --git a/framework/Web/UI/WebControls/TDropDownListColumn.php b/framework/Web/UI/WebControls/TDropDownListColumn.php index dbc20f7a..384a3701 100644 --- a/framework/Web/UI/WebControls/TDropDownListColumn.php +++ b/framework/Web/UI/WebControls/TDropDownListColumn.php @@ -18,11 +18,13 @@ Prado::using('System.Web.UI.WebControls.TDropDownList');   *
   * TDropDownListColumn represents a column that is bound to a field in a data source.
   * The cells in the column will be displayed using the data indexed by
 - * {@link setDataField DataField}. You can customize the display by
 - * setting {@link setDataFormatString DataFormatString}.
 + * {@link setDataTextField DataTextField}. You can customize the display by
 + * setting {@link setDataTextFormatString DataTextFormatString}.
   *
   * If {@link setReadOnly ReadOnly} is false, TDropDownListColumn will display cells in edit mode
   * with dropdown lists. Otherwise, a static text is displayed.
 + * The currently selected dropndown list item is specified by the data indexed with
 + * {@link setDataValueField DataValueField}.
   *
   * There are two approaches to specify the list items available for selection.
   * The first approach uses template syntax as follows,
 @@ -107,35 +109,57 @@ class TDropDownListColumn extends TDataGridColumn  	}
  	/**
 -	 * @return string the field name from the data source to bind to the column
 +	 * @return string the field of the data source that provides the text content of the column.
  	 */
 -	public function getDataField()
 +	public function getDataTextField()
  	{
 -		return $this->getViewState('DataField','');
 +		return $this->getViewState('DataTextField','');
  	}
  	/**
 -	 * @param string the field name from the data source to bind to the column
 +	 * Sets the field of the data source that provides the text content of the column.
 +	 * If this is not set, the data specified via {@link getDataValueField DataValueField}
 +	 * will be displayed in the column.
 +	 * @param string the field of the data source that provides the text content of the column.
  	 */
 -	public function setDataField($value)
 +	public function setDataTextField($value)
  	{
 -		$this->setViewState('DataField',$value,'');
 +		$this->setViewState('DataTextField',$value,'');
  	}
  	/**
  	 * @return string the formatting string used to control how the bound data will be displayed.
  	 */
 -	public function getDataFormatString()
 +	public function getDataTextFormatString()
  	{
 -		return $this->getViewState('DataFormatString','');
 +		return $this->getViewState('DataTextFormatString','');
  	}
  	/**
  	 * @param string the formatting string used to control how the bound data will be displayed.
  	 */
 -	public function setDataFormatString($value)
 +	public function setDataTextFormatString($value)
  	{
 -		$this->setViewState('DataFormatString',$value,'');
 +		$this->setViewState('DataTextFormatString',$value,'');
 +	}
 +
 +	/**
 +	 * @return string the field of the data source that provides the key selecting an item in dropdown list.
 +	 */
 +	public function getDataValueField()
 +	{
 +		return $this->getViewState('DataValueField','');
 +	}
 +
 +	/**
 +	 * Sets the field of the data source that provides the key selecting an item in dropdown list.
 +	 * If this is not present, the data specified via {@link getDataTextField DataTextField} (without
 +	 * applying the formatting string) will be used for selection, instead.
 +	 * @param string the field of the data source that provides the key selecting an item in dropdown list.
 +	 */
 +	public function setDataValueField($value)
 +	{
 +		$this->setViewState('DataValueField',$value,'');
  	}
  	/**
 @@ -257,7 +281,7 @@ class TDropDownListColumn extends TDataGridColumn  			case TListItemType::Item:
  			case TListItemType::AlternatingItem:
  			case TListItemType::SelectedItem:
 -				if($this->getDataField()!=='')
 +				if($this->getDataTextField()!=='' || $this->getDataValueField()!=='')
  					$cell->attachEventHandler('OnDataBinding',array($this,'dataBindColumn'));
  				break;
  		}
 @@ -272,14 +296,24 @@ class TDropDownListColumn extends TDataGridColumn  	{
  		$item=$sender->getNamingContainer();
  		$data=$item->getDataItem();
 -		if(($field=$this->getDataField())!=='')
 -			$data=$this->getDataFieldValue($data,$field);
 -		$formatString=$this->getDataFormatString();
 -		$value=$this->formatDataValue($formatString,$data);
 +		if(($valueField=$this->getDataValueField())!=='')
 +			$value=$this->getDataFieldValue($data,$valueField);
 +		else
 +			$value='';
 +		if(($textField=$this->getDataTextField())!=='')
 +		{
 +			$text=$this->getDataFieldValue($data,$textField);
 +			if($valueField==='')
 +				$value=$text;
 +			$formatString=$this->getDataTextFormatString();
 +			$text=$this->formatDataValue($formatString,$text);
 +		}
 +		else
 +			$text=$value;
  		if($sender instanceof TTableCell)
 -			$sender->setText($value);
 +			$sender->setText($text);
  		else if($sender instanceof TDropDownList)
 -			$sender->setSelectedValue($data);
 +			$sender->setSelectedValue($value);
  	}
  }
  | 
