Keine Anzeige der TableRelation

Hallo,

wir verwenden einen eigenen Datenprovider, den ich nun erweitern soll.
Die im Code erstellten Tabellen werden ohne Problem im Designer angezeigt.
Was leider nicht klappt ist die Anzeige der Beziehung.
Meine Implementierung der ITableRelation-Schnittstelle sieht wie folgt aus:

public class MinimalRelationDescription: ITableRelation
{
public MinimalRelationDescription(string relationName, string parentColumnName, string childColumnName, string parentTableName, string childTableName)
{
RelationName = relationName;
ParentColumnName = parentColumnName;
ChildColumnName = childColumnName;
ParentTableName = parentTableName;
ChildTableName = childTableName;
}
public string RelationName { get; }
public string ParentColumnName { get; }
public string ChildColumnName { get; }
public string ParentTableName { get; }
public string ChildTableName { get; }
}

Ich übergebe die Namen der Tabellen wie in L&L angezeigt und auch die entsprechenden Feldnamen.
Leider wird für die neuen Tabellen keine Beziehung angezeigt.

Muss noch etwas anderes implementiert werden?

Gruß
Peter

Im Prinzip sieht die Implementierung der Klasse ohne weitere Details zur ganzen Struktur des Datenproviders aus der Ferne alleine passend aus würde ich sagen.

Wichtig ist aber auch, dass die Klasse verwendet wird was bedeutet, dass in der Hauptklasse für IDataProvider auch die Property Relations implementiert ist - Beispiel:

...
private List<ITableRelation> _myTableRelations = new List<ITableRelation>();
ReadOnlyCollection<ITableRelation> IDataProvider.Relations
{
    get
    {
        InitProviderIfNeeded();
        return _myRTableRelations.AsReadOnly();
    }
}
...

Und wie es das Snippet oben schon zeigt, dass auch entsprechend die Liste (vielleicht auch direkt im Konstruktor des Hauptklasse oder beim Zurückliefern der Tabellen erst) mit den Relationen zwischen den Tabellen erstellt wird - InitProviderIfNeeded()

Also sowas wie das hier dann:

...
string relationName = string.Format("{0}_{1}2{2}_{3}",
        ParentTableName,
        ParentTableRelationFieldName,
        ChildTableName,
        ChildTableRelationFieldName
        );

_relations.Add(new MinimalRelationDescription(relationName,
    ParentTableRelationFieldName,
    ChildTableRelationFieldName,
    ParentTableName,
    ChildTableName
    ));
...

Vielen Dank für die Hinweise!
Ja, die Relationen werden initialisiert und im DataProvider zur Verfügung gestellt.
Sie sind - mit den richtigen Namen für Tabellen und Felder - in der Eigenschaft

public ReadOnlyCollection<ITableRelation> Relations { get; }

hinterlegt.
Die Funktion

public ITableRelation GetRelation(string relationName)

liefert die Relationen korrekt, ebenso liefert die Funktion

public ITable GetTable(string tableName)

die Tabelle - dennoch erfolgt leider keine Anzeige der Beziehung im Designer…

Dann ist vielleicht die Frage, wo du die Relationen im Designer suchst - hier ist ein Artikel zu einem häufigen Missverständnis, vielleicht hilft der schon?

Das wird sich übrigens demnächst ändern :slight_smile:.

Wenn die Relationen aber auch beim Hinzufügen eines neuen Elements im Berichtscontainer nicht zu sehen sind müssten wir mal einen Blick in eine Logdatei werfen - das kann entweder über den Support oder hier im Forum passieren.