From 996c6d61ffef676247f8b1c9a7ee4b7c69850654 Mon Sep 17 00:00:00 2001 From: xue <> Date: Tue, 4 Apr 2006 16:50:43 +0000 Subject: Format string in TDataGrid columns can now evaluate an expression --- framework/Web/UI/WebControls/TDataGridColumn.php | 26 +++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'framework/Web/UI/WebControls/TDataGridColumn.php') diff --git a/framework/Web/UI/WebControls/TDataGridColumn.php b/framework/Web/UI/WebControls/TDataGridColumn.php index de9d9d5c..a22fa240 100644 --- a/framework/Web/UI/WebControls/TDataGridColumn.php +++ b/framework/Web/UI/WebControls/TDataGridColumn.php @@ -331,17 +331,37 @@ abstract class TDataGridColumn extends TApplicationComponent } /** - * Formats the text value according to format string. - * This method invokes the {@link sprintf} to do string formatting. + * Formats the text value according to a format string. * If the format string is empty, the original value is converted into * a string and returned. + * If the format string starts with '#', the string is treated as a PHP expression + * within which the token '$$' is translated with the data value to be formated. + * Otherwise, the format string and the data value are passed + * as the first and second parameters in {@link sprintf}. * @param string format string * @param mixed the data associated with the cell * @return string the formatted result */ protected function formatDataValue($formatString,$value) { - return $formatString===''?TPropertyValue::ensureString($value):sprintf($formatString,$value); + if($formatString==='') + return TPropertyValue::ensureString($value); + else if($formatString[0]==='#') + { + $expression=strtr(substr($formatString,1),array('$$'=>'$value')); + try + { + if(eval("\$result=$expression;")===false) + throw new Exception(''); + return $result; + } + catch(Exception $e) + { + throw new TInvalidOperationException('datagridcolumn_expression_invalid',get_class($this),$expression,$e->getMessage()); + } + } + else + return sprintf($formatString,$value); } } -- cgit v1.2.3