Kein Zugriff auf Properties eines übergebenen Objekts

Hallo zusammen,

Ich probiere mich gerade etwas mit LL27 aus.

Ich habe versucht einmal ein JSON-Objekt und einmal ein ganz normales Objekt an den Designer zu übergeben um damit zu arbeiten.

  1. Das JSON-Objekt ist sauber im Designer “angekommen”, leider kann ich auf alle Werte ausschließlich innerhalb von Tabellen und Digrammen zugreifen. Warum kann ich nicht in einem ganz normalen Textfeld auf ein Element zugreifen?

Code hierzu:

JsonDataProvider jsonDataProvider = new JsonDataProvider(File.ReadAllText(@"C:\users\taut\desktop\testinv.json"));
jsonDataProvider.RootTableName = "invoice";

ListLabel label = new ListLabel();
label.Design();
  1. Das “normale” Objekt, welches ich über das in der Doku angegebene Beispiel erzeugt habe, sehe ich im Designer keine Properties und somit auch kein Zugriff möglich.

Code hierzu:

List<TestObject> invoices = new List<TestObject>();
invoices.Add(new TestObject { name = "WTE", invoiceNr = "22082154" });
invoices.Add(new TestObject { name = "UKM", invoiceNr = "22071245" });

combit.Reporting.DataProviders.ObjectDataProvider dbp = new combit.Reporting.DataProviders.ObjectDataProvider(invoices);
dbp.FlattenStructure = true;

ListLabel label = new ListLabel();
label.DataSource = dbp;
label.Design();

Ich habe die Docs und Examples durchforstet und finde leider nicht heraus warum mir kein normaler Zugriff auf die Properties, vorallem beim JSON-Objekt ermöglicht wird. Muss ich noch irgendwelche Settings übergeben oder ist das eine Trial-Beschränkung?

Danke im Voraus

Hallo und herzlich willkommen in unserem Forum :slight_smile:.

Warum kann ich nicht in einem ganz normalen Textfeld auf ein Element zugreifen?

Der Punkt hier ist, dass es ja mehrere Datensätze geben könnte. Wenn Sie ein Listenprojekt designen (das ist der Default beim Aufruf von Design) stehen Ihnen daher ausschließlich Felder (=Tabellendaten), keine Variablen zur Verfügung. Letztere leben in Textobjekten. Hier wird der Unterschied noch einmal ausführlicher erklärt. Eine Ausnahme bildet die Verwendung des AutoMasterMode AsVariables - das ist z.B. hier dokumentiert.

Wenn Sie überhaupt keine tabellarischen Daten haben wollen brauchen Sie lediglich den Projekttypen auf Card zu ändern. Die Dokumentation dazu finden Sie hier.

Ich hoffe, das kann schon ein bisschen weiterhelfen, sonst melden Sie sich noch einmal.

Das “normale” Objekt, welches ich über das in der Doku angegebene Beispiel erzeugt habe, sehe ich im Designer keine Properties und somit auch kein Zugriff möglich.

Es ist wichtig, dass Sie die Eigenschaften, die Sie zur Verfügung stellen als public Properties definieren (also mit get/set) und nicht das Browsable(false) Attribut auf die Properties anwenden. Die Deklaration der TestObject-Klasse fehlt hier leider - wenn der Tipp nichts hilft fügen Sie doch einmal die Deklaration hier dazu, dann sehen wir uns das genauer an.

1 Like

Vielen Dank, ich habe damit die Lösung gefunden!

JsonDataProvider jsonDataProvider = new JsonDataProvider(File.ReadAllText(@"C:\users\taut\desktop\testinv.json"));
jsonDataProvider.RootTableName = "invoiceHeader";
jsonDataProvider.ArrayValueName = "invoiceItems";
jsonDataProvider.FlattenStructure = true;
ListLabel label = new ListLabel();
label.DataSource = jsonDataProvider;
label.DataMember = "invoiceHeader";
label.AutoMasterMode = LlAutoMasterMode.AsVariables;
label.Design();

Somit kann ich auf die “statischen Headerdaten” und die Daten die wirklich mehrfach vorkommen nur in Tabellen darstellen.

Vielen Dank nochmals für die schnelle und ausführliche Antwort!

1 Like