+1 800 256 3608 (toll-free in North America) or +49 7531 9060-10| service@combit.com

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:

© combit GmbH