TableFieldText Contents

Hallo LL-Team

Mein aktuelles Problem besteht darin in C# eine GenericList ohne irgendwelche Relationen als DataSource anzugeben und dann anzuzeigen.

Unser aktueller Code sieht in etwa so aus:

LL = new ListLabel();
LL.AutoProjectType = LlProject.List;
LL.AutoProjectStream = new MemoryStream();
LL.AutoPrinterSettingsStream = new MemoryStream();
LL.Debug = LlDebug.LogToFile;

LLProject = new ProjectList(LL);
LLProject.Open(LL.AutoProjectStream, LL.AutoPrinterSettingsStream);

ReportContainer = LLProject.Object.AddNewReportContainer();

var provider = new ObjectDataProvider(items, 1);
provider.RootTableName = "ItemName";

LL.DataSource = provider;
LL.DataBindingMode = DataBindingMode.Preload;

var table = ReportContainer.SubItems.AddNewTable();
table.Name = "ItemName";
table.TableId = "ItemName";
table.RelationId = "";

var header = table.lines.AddNew();
var headerField = header.Fields.AddNewText();
headerField.Contents = "ColumnNameString";

var data = table.Lines.Data.AddNew();
var dataField = data.Fields.AddNewText();
dataField.Contents = "ItemName.MyProperty";

Bei LL.Design() kommt dann folgende Exception: combit.ListLabel23.LL_Expression_Exception und im LLDebugLogFile steht noch:

LlDomSetProperty(0000020BF80715D0,'Contents','ItemName.MyProperty')
error parsing formula 'ItemName.MyProperty': Syntaxfehler: 'ItemName.MyProperty' kann nicht interpretiert werden;

Soweit zu dem was nicht funktioniert.
Anschliessend kurz noch was geht.

Wenn ich das DataField ausklammere kann ich im Designer sehen, das alle Fields der Items korrekt reflektiert wurden und manuell (nicht programmatisch) können diese auch für neue Datenzeilen verwendet werden.

Wenn ich nur String und kein Field als Content übergebe funkioniert alles gut und es wird auch eine Datenzeile gedruckt pro Item in der GenericList.

Was muss ich ändern, damit im dataField die Werte der Items angezeigt werden?

Freundliche Grüsse

Könnten Sie einmal versuchen, die Zuweisung der Datenquelle, also

LL.DataSource = provider;
LL.DataBindingMode = DataBindingMode.Preload;

direkt nach

LL.Debug = LlDebug.LogToFile;

vorzunehmen? Im Moment dürfte das etwas zu spät sein, das würde das Problem erklären. Wenn es dann immer noch nicht gehen sollte hängen Sie bitte einmal eine Logdatei hier an, dann sollte sich das schnell klären lassen :slight_smile:.

Habe den SetDataSource verschoben. Leider stehe ich immer noch an.

Im Anhang wäre also die LogDatei. Besten Dank im Voraus.

Log.txt (82.8 KB)

Sind Sie sicher, dass immer noch die gleiche Meldung kommt? Das Logile hört direkt beim Übergeben der ersten Tabelle auf, an sich müsste z.B. LlProjectOpen noch zu sehen sein, auch das von Ihnen oben angesprochene LlDomSetProperty ist nicht zu sehen. Könnten Sie einmal das Filelogging unterdrücken und direkt unser Debugtool Debwin4 starten?

Tut mir leid, da hatte ich wohl etwas auskommentiert. Nein, es ist tatsächlich nicht mehr die gleiche Meldung. Neu kommt nun combit.ListLabel23.LL_InvalidDataMemberException.

Im Anhang sind nun 2 LogDateien.

Die erste mit dem Fehler zu Beginn und die zweite Datei mit der vorgeschlagenen Verschiebung von SetDataSource().

Log.txt (210.6 KB)

Log.txt (58.9 KB)

Das klingt so, als würde die Tabelle, die dem DataMember-Property zugewiesen ist nicht gefunden. Laut Ihrem Codeschnipsel setzen Sie diese aber gar nicht. Oder passiert das an einer anderen Stelle? Könnten Sie einmal explizit

LL.DataMember = String.Empty; 

an der Stelle aufrufen, an der die Datenquelle zugewiesen wird?

Können Sie zusätzlich noch einen Screenshot der Feldliste im Designer machen (wenn der sich denn öfnen lässt, z.B. ohne den DOM-Code)? Dann könnte man sehen, mit welchem Namen die Felder tatsächlich angemeldet werden.

Besten Dank für die Hilfe.

Das Problem LL_InvalidDataMemberException hat sich nach dem korrigieren eines Schreibfehlers bei provider.RootTableName gelöst und die Liste wird jetzt korrekt erstellt.

1 Like

Das freut mich - dann ein schönes Wochenende wenn es soweit ist :sunny:

Die Zuweisung der Datenquelle direkt nach LL.Debug = LlDebug.LogToFile war die Lösung.

Gleichfalls :+1: