diff --git a/forms/gridfield/GridField.php b/forms/gridfield/GridField.php
index 299442fb3..2c258fd92 100755
--- a/forms/gridfield/GridField.php
+++ b/forms/gridfield/GridField.php
@@ -195,7 +195,8 @@ class GridField extends FormField {
/**
* Specify custom formatting for fields, e.g. to render a link instead of pure text.
* Caution: Make sure to escape special php-characters like in a normal php-statement.
- * Example: "myFieldName" => '$ID'
+ * Example: "myFieldName" => '$ID'.
+ * Alternatively, pass a anonymous function, which takes one parameter: The list item.
*
* @param array $casting
* @todo refactor this into GridFieldComponent
diff --git a/forms/gridfield/GridFieldDataColumns.php b/forms/gridfield/GridFieldDataColumns.php
index 2b6594e55..9ead7c663 100644
--- a/forms/gridfield/GridFieldDataColumns.php
+++ b/forms/gridfield/GridFieldDataColumns.php
@@ -95,11 +95,16 @@ class GridFieldDataColumns implements GridField_ColumnProvider {
return $value;
}
- $format = str_replace('$value', "__VAL__", $gridField->FieldFormatting[$fieldName]);
- $format = preg_replace('/\$([A-Za-z0-9-_]+)/', '$item->$1', $format);
- $format = str_replace('__VAL__', '$value', $format);
- eval('$value = "' . $format . '";');
- return $value;
+ $spec = $gridField->FieldFormatting[$fieldName];
+ if(is_callable($spec)) {
+ return $spec($item);
+ } else {
+ $format = str_replace('$value', "__VAL__", $spec);
+ $format = preg_replace('/\$([A-Za-z0-9-_]+)/', '$item->$1', $format);
+ $format = str_replace('__VAL__', '$value', $format);
+ eval('$value = "' . $format . '";');
+ return $value;
+ }
}
/**