Ansichten basieren auf einer Konfiguration vom Typ GridViewConfiguration. Konfigurierte und dynamisch generierte Ansichten erzeugen den Datenprovider auf Basis der gesetzten Datentabellen und Spalten automatisch.

In freien Dialogen ist es unter Umständen sinnvoll eine temporäre GridViewConfiguration zu erstellen. In diesem Fall muss man einen eigenen Datenprovider implementieren, beispielsweise , wenn man eigene Daten anzeigen möchte oder wenn die Filter zur Laufzeit modifiziert werden sollen.

Dazu setzt man auf GridViewConfiguration die Eigenschaft DataProviderProperties. Dieses Objekt muss vom Typ GridDataProviderPropertiesBase sein. Im einfachsten Fall setzt man dort DataProviderTypeFullName auf den vollständigen Klassennamen des eigenen Dataproviders. Dieser muss das Interface IGridDataProvider implementieren. Die Properties-Klasse steht im Datenprovider zur Verfügung. Damit hat man Zugriff auf die GridViewConfiguration. Wenn man eine eigene Properties-Klasse implementiert, kann man damit das Verhalten des eigenen Datenproviders abhängig implementieren.

Beispiel eigene Properties Klasse

public class GDPMyOwnProperties : GridDataProviderPropertiesBase
{
    public bool WithReadPermissions { get; set; }
    public string ConfiguredValueFilter { get; set; }
    public string ConfiguredValueIf { get; set; }

    public GDPMyOwnProperties() : base()
    {
        DataProviderTypeFullName = typeof(GDPMyOwn).FullName;
    }
}

Beispiel eigenes Row-Model

public class MyOwnRowModel : GridDataProviderRowBase
{
    public string Name { get; set; }
    public string ConfiguredValue { get; set; }
    public string CriteriaValue { get; set; }
}

Beispiel eigener Datenprovider

In diesem Beispiel findet man

  • Abhängig von den Properties wird ein Query mit oder ohne Leserechte erstellt.
  • Abhängig von den Properties werden verschiedene Filter gesetzt.
    • Einer mit Hilfe einer Formel
    • und einer auf ein konfiguriertes Feld.
  • Das Row-Model wird erstellt.
    • Zuweisung von programmierten Felder (Oid)
    • Zuweisung von konfigurierten Felder (ConfiguredValue)
    • Zuweisung mit Hilfe einer Formel
public class GDPMyOwn : IGridDataProvider
{
    public GridDataProviderPropertiesBase Properties { get; set; }

    public IQueryable<GridDataProviderRowBase> GetData(GridDataProviderParameter parameter = null)
    {
        if (Properties is GDPMyOwnProperties myProperties)
        {
            Session session = Api.ORM.GetNewSession();
            IQueryable<OrmUserProfile> query;
            if (myProperties.WithReadPermissions)
                query = Api.ORM.GetQueryWithReadPermissions<OrmUserProfile>(session);
            else
                query = Api.ORM.GetQuery<OrmUserProfile>(session);

            if (string.IsNullOrEmpty(myProperties.ConfiguredValueFilter))
                query = query.Where(ff => (string)ff.GetMemberValue("ConfiguredValue") == myProperties.ConfiguredValueFilter);
            else
            {
                CriteriaOperator criteriaWhere = new OperandProperty("ConfiguredValue") != new OperandValue(null);
                query = query.Where(ff => ff.Fit(criteriaWhere));
            }

            CriteriaOperator expression = new OperandProperty("ConfiguredValue") == new OperandValue(myProperties.ConfiguredValueIf);
            CriteriaOperator ifpart = new OperandValue("Replaced value");
            CriteriaOperator elsepart = new OperandProperty("ConfiguredValue");
            CriteriaOperator criteria = new FunctionOperator(FunctionOperatorType.Iif, expression, ifpart, elsepart);

            IQueryable<MyOwnRowModel> selectQuery = query.Select(ff => new MyOwnRowModel
            {
                Oid = ff.Oid,
                RowId = ff.Oid,
                Name = ff.EntityTitle,
                ConfiguredValue = (string)ff.GetMemberValue("ConfiguredValue"),
                CriteriaValue = (string)ff.Evaluate(criteria),
            });
            return selectQuery;
        }

        throw new Exception("Wrong properties");
    }
}

Verwendung

Um diesen Datenprovider zu nutzen, muss eine dynamische Ansichtenkonfiguration angelegt werden. In dieser Konfiguration gibt man dann seinen eigenen Datenprovider an. Die Spalten der Gridkonfiguration, müssen zu dem Rowmodel passen.

GridViewConfiguration engineGrid = new GridViewConfiguration()
{
    Id = "436656b6-703f-49bf-8a62-1de8d9a6f805".ToGuid(),
    ConfigurationName = "MyGridConfiguration",
    // Spaltennamen sollen dem Modelnamen entsprechen. Kein automatisches unique machen der Spaltennamen
    UseSourceColumns = true,
    DynamicallyGenerated = true,
    ShowSearchPanel = false,
    ShowFilterRowForColummns = false,
    // Setzen des eigenen Datenproviders
    DataProviderProperties = new GDPMyProviderProperties()
};