Spalten die auf Formeln bassieren auf CalculatedColumnBase
, dieses Steuerelement hat einen Standard-Renderer CalculatedColumnBaseDefaultRenderer
. Damit können eigene Spalten auf Basis einer Formel implementiert werden.
Neben dem Setzen vom ColumnType
, muss auch die Methode GetDataType
überschrieben werden. Diese definiert den Datentyp welcher durch die Formel zurückgegeben wird.
Die Formel selbst wird in GetCriteria
implementiert. In diesem Beispiel wir die Anzahl der Datensätze in einem Ordner gezählt. Dabei werden die Leserechte auf die Datensätze berücksichtigt.
[Serializable]
[Toolbox(EnumConfigurationType.GridConfigurationGuid)]
public class CalculatedRecordCollectionCount : CalculatedColumnBase
{
public CalculatedRecordCollectionCount()
{
ToolboxName = "Record collection count column";
Caption = "Record collection count column";
ControlInitName = "RecordCollectionCount";
ToolboxGroupName = Constants.Designer.ToolboxGroups.Grid.Basic;
Icon = "sum";
Id = [INSERT UNIQUE GUID]".ToGuid();
ColumnType = Api.Enum.EnumValueConverter.GetEnumColumnTypeValue(EnumDataTypes.Int32);
}
public override CriteriaOperator GetCriteria(bool extendedValidation)
{
// Bedingung für den OrmBABAse join
CriteriaOperator recordCondition = new OperandProperty("^." + nameof(OrmRelation.Target)) == new OperandProperty(nameof(OrmBABase.Oid)) & new OperandProperty(nameof(OrmBABase.IsInRecycleBin)) == new OperandValue(false);
CriteriaOperator readCondition = CriteriaOperatorBuilder.ApplyReadPermissions(null, typeof(OrmBABase), new[] { EnumDataSource.BABase.ValueGuid });
if (!CriteriaOperatorHelper.IsNull(readCondition))
recordCondition &= readCondition;
// OrmBABAse join
JoinOperand recordJoin = new JoinOperand(nameof(OrmBABase), recordCondition, Aggregate.Exists, null);
// Bedinung für den OrmRelation join
CriteriaOperator relationCondition = new OperandProperty(nameof(OrmRelation.Source)) == new OperandProperty("^." + nameof(OrmBABase.Oid)) & new OperandProperty(nameof(OrmRelation.RelationType)) == new OperandValue(EnumRelationType.RecordCollection.ValueGuid);
relationCondition &= recordJoin;
// Rückgabe des OrmRelation joins
return new JoinOperand(nameof(OrmRelation), relationCondition, Aggregate.Count, null);
}
public override Type GetDataType(GridViewConfiguration gridConfiguration)
{
return typeof(int);
}
}