Wie in den Kapiteln über Ribbon bar Aktionen und Maskensteuerelmente ebenfalls beschrieben, wird zunächst das Steuerelement für die Toolbox im Designer benötigt. Mit dem Attribut Toolbox wird es dem Ansichtenbereich hinzugefügt.

Um das korrekte Drag & Drop Verhalten zu ermöglichen, wird das Interface IGridDataColumnControl implementiert. Damit gilt die neue Spalte als eine normale Datenspalte. Als Basisklasse muss mindestens GridColumnBase genutzt werden. Möchte man eine Datenspalte von der aktuellen Datentabelle anzeigen kann man von GridDataColumnBase ableiten und hat damit eine Feldauswahl (inkl. Teil-Datentabellen-Felder). Folgende virtuelle Methoden sind dabei zu beachten:

  • GetTypesOfOrmFieldName Beeinflusst die Auswahl der Felder. Dafür werden die unterstützen Typen von Datentabellenfeldern zurückgegeben. Beispielsweise OrmTextField für Textfelder. Die Basis Klasse aller Felder ist OrmFieldBase.
  • GetDataType Ermittelt in der Basisimplementierung den Datentypen der Spalte auf Basis des gewählten Feldes. Beispielweise für OrmTextField string. Möchte man davon abweichen, ist die Methode zu überladen.

Die Werte von EnumColumnType , um den ColumnType zu setzen, entsprechen den Werten von MVCxGridViewColumnType von Dev Express.

In diesem Beispiel werden zwei Eigenschaften implementiert, welche genutzt werden, damit der Konfigurator das Verhalten dieser neuen Spalte beeinflussen kann.

[Serializable]
[Toolbox(EnumConfigurationType.GridConfigurationGuid)]
public class MyTextColumn : GridDataColumnBase, IGridDataColumnControl
{
    public MyTextColumn()
    {
        ColumnType = Api.Enum.EnumValueConverter.GetEnumColumnTypeValue(EnumDataTypes.String);
        ToolboxName = "My Text Column";
        Caption = "My Text Column";
        ControlInitName = "MyTextColumn";
        ToolboxGroupName = Constants.Designer.ToolboxGroups.Grid.Basic;
        Icon = Constants.Icons.Designer.Grid.TextBox;
        Id = [INSERT UNIQUE GUID]".ToGuid();
    }

    [DisplayName("Default value")]
    [HelpText("If value is empty this value is used")]
    [PropertiesGroup("My properties group", 10), PropertiesForm(10)]
    public string DefaultValue { get; set; }

    [DisplayName("Encode HTML")]
    [HelpText("Encode the HTML content")]
    [PropertiesGroup("My properties group", 10), PropertiesForm(20)]
    public bool EncodeHTML { get; set; } = true;
}