Wie für die Maskensteuerelemente werden auch für die Ansichten Spalten und Renderer benötigt. Mit dem Attribut GridColumnControlRenderer wird der Renderer dem Steuerelement zugeordnet. Der Renderer muss das Interface IGridColumnControlRenderer implementieren.

[GridColumnControlRenderer(typeof(MyTextColumn))]
public class MyTextColumnDefaultRenderer : IGridColumnControlRenderer
{ ... }

Datenbankabfrage

Der wesentliche Aspekt bei der Performance von Ansichten ist die Laufzeit der Datenbankabfragen. Es ist sehr wichtig darauf zu achten, dass die Ansicht mit einer Abfrage geladen werden kann. Beispielsweise kann es passieren, das pro angezeigter Zeile weitere Abfragen gestartet werden, dies ist unbedingt zu vermeiden. Auch auf möglicherweise fehlende Indices ist zu achten.

Für die Abfrage wird die Formelsprache eingesetzt, die den Criteria Operators von Dev Express entspricht. In CriteriaOperatorBuilder befinden sich eine Reihe von Hilfsmethoden zum Erstellen solcher Formeln.

Um in Formeln Joins zu ermöglichen, kann man sogenannte Free Joins verwenden. Dev Express optimiert die Abfragen, das heißt identische Free Joins in verschiedenen Spalten münden in einen SQL Join.

In GridRendererHelper befinden sich Hilfsmethoden, die zum Erstellen der GridViewQueryColumnProperties genutzt werden können. Zu beachten ist, dass sowohl in GetQueryProperties als auch später GetRenderColumns eine Liste zurück geliefert wird. Damit ist es möglich, dass pro Steuerelement mehrere Spalten generiert werden können. Dies können auch unsichtbare Spalten sein, mit deren Hilfe Funktionalitäten gebaut werden können.

In diesem Beispiel werden die Bestandteile von GridViewQueryColumnProperties mit Hilfe von Methoden aus GridRendererHelper gefüllt.

  • Name Der eindeutige Spaltenname. Auch bei mehrfacher Verwendung des Steuerelements, muss der Name eindeutig sein.
  • DataType Der C# Datentyp der Spalte. Dieser sollte in der Regel dem Typen entsprechen, der im Steuerelement festgelegt wurde. Durch die Hilfsmethode wird dies sichergestellt.
  • Criteria Die Formel zum Berechnen der Spalte
public IEnumerable<GridViewQueryColumnProperties> GetQueryProperties(GridViewConfiguration configuration, GridColumnBase column)
{
    MyTextColumn myTextColumn = (MyTextColumn)column;
    string columnName = GridRendererHelper.GetDataColumnBaseGridColumnName(configuration, myTextColumn);
    Type dataType = GridRendererHelper.GetDataColumnBaseDataType(configuration, myTextColumn);
    CriteriaOperator criteria = GridRendererHelper.GetDataColumnBaseCriteria(configuration, myTextColumn);
    return new[] { new GridViewQueryColumnProperties { Name = columnName, DataType = dataType, Criteria = criteria } };
}

Um die konfigurierbare Eigenschaft des Steuerelements in der Formel zu berücksichtigen, muss dies eingefügt werden. Dabei die Hilfsmethode GetDataColumnBaseCriteria verwendet, um auf die Formel für den Zugriff auf die Spalte zu bekommen. Diese kann dann weiter verwendet werden.

CriteriaOperator criteria;
if (!string.IsNullOrEmpty(myTextColumn.DefaultValue))
{
    CriteriaOperator fieldValue = GridRendererHelper.GetDataColumnBaseCriteria(configuration, myTextColumn);
    CriteriaOperator expression = fieldValue == new OperandValue(null);
    CriteriaOperator ifpart = new OperandValue(myTextColumn.DefaultValue);
    CriteriaOperator elsepart = fieldValue;
    criteria = new FunctionOperator(FunctionOperatorType.Iif, expression, ifpart, elsepart);
}
else
    criteria = GridRendererHelper.GetDataColumnBaseCriteria(configuration, myTextColumn);

Rendern

Für das Rendern werden MVCxGridViewColumn von DevExpress benötigt. Mit der Hilfsmethode CreateDataBaseRenderColumn wird automatisch eine entsprechende Spalte mit allen Einstellungen generiert und man muss lediglich die gewünschten Änderungen anschließend durchführen. In unserem Beispiel ist dies das Setzen von EncodeHTML.

public IEnumerable<MVCxGridViewColumn> GetRenderColumns(GridViewConfiguration configuration, GridColumnBase column, GridViewRendererParameter parameter)
{
    MyTextColumn myTextColumn = (MyTextColumn)column;
    MVCxGridViewColumn gridColumn = GridRendererHelper.CreateDataBaseRenderColumn(configuration, myTextColumn, parameter);
    gridColumn.PropertiesEdit.EncodeHtml = myTextColumn.EncodeHTML;
    return new[] { gridColumn };
}

Hat man in GetQueryPropertiesq einen anderen Spaltennamen definiert, muss dieser hier ebenfalls neu auf Name und FieldName gesetzt werden. Bei Name wird der Präfix “Col” benötigt.

gridColumn.Name = "Col" + columnName;
gridColumn.FieldName = columnName;

Rendern und Abfragen unterdrücken

Die Abfrage der Spalten und das Render der Spalten kann man mit Hilfe von CanColumnBeRendered unterdrücken.

public bool CanColumnBeRendered(GridViewConfiguration configuration, GridColumnBase column)
{
    return true;
}