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

Mehrere DataMember aus DataSource (DataSet) festlegen


(Carsten Geuer) #1

Hallo zusammen,

ich möchte ein Card-Projekt ausdrucken. Bei dem Projekt handelt es sich um eine DIN-A4 Seite mit Text und diversen Platzhaltern. Das Drucken erfolgt durch eine Print()-Schleife:

Als DataSource weise ich LL ein Dataset zu.

Das Dataset besteht aus 3 Tabellen. Jede dieser Tabellen hat eine Zeile. Beispiel:

  • Stammdaten
  • Präsenzdaten
  • Metadaten

Pseudocode:

[code]// Daten aus Datenbank ermitteln
var dataSet = GetDataSet();
LL.DataSource = dataSet;

// Jeden Wert aus der Tabelle in den Variablen speichern
foreach (var table in dataSet.Tables) {
foreach (var column in table.Columns){
LL.Variables.Add($"{table.Name}.{column.Name}", column.Value)
}
}

// Drucken, bis Anzahl der Kopien erreicht wurde
for (int counter = 0; counter < numberOfCopies; counter++) {
LL.Print();
}
[/code]

Ich rufe LL.Print() in einer Schleife auf. Der erste Ausdruck ist immer korrekt und vollständig. Beim zweiten Aufruf fehlen allerdings Informationen. Ich habe herausgefunden, dass die “erste” Tabelle (MyDataSet.Tables[0]) auch im nachfolgenden Ausdruck vorhanden ist.

Wenn ich den DataMember zuweise (beispielsweise durch LL.DataMemer = “Metadaten”;), sind die Metadaten beim zweiten Aufruf vorhanden allerdings fehlen alle anderen Informationen auf dem zweiten Ausdruck.

Eine Relation zwischen den Tabellen gibt es nicht. Die Anwendung bereitet die Daten auf und gibt diese als einzelne Tabelle zurück. Eine Zuweisung wie LL.DataMember = “Stammdaten,Präsenzdaten,Metadaten” erzeugt eine Exception, da es diese Tabelle nicht gibt (“DataMember table not found in datasource or no table exists at all.”).
Wie kann ich festlegen, dass der Bericht alle 3 Tabellen beim n-ten Aufruf von LL.Print() gleichwertig behandelt?

Der “Fehler” beim nachfolgenden Print() besteht darin, dass Felder nicht gefüllt sind (Leerstring) oder Bedingungen “false” sind und dadurch bestimmte Bereiche ausgeblendet werden (obwohl diese beim ersten Print() korrekt angezeigt werden).
Die Daten der Tabelle[0] (oder die festgelegte Tabelle durch DataMember) sind immer vorhanden und werden auch in nachfolgenden Ausdrucken angegeben, Leider werden die Informationen der anderen beiden Tabellen nicht angezeigt.

Der Aufruf mit LL.Core.LlSetOption(LL_OPT_COPIES) und LL_OPT_COPIES_SUPPORTED funktioniert bei mir nicht (KBTD000497). Es wird trotzdem nur ein einziges Dokument gedruckt (daher die Schleife).

Ich hoffe, ihr habt eine Idee, wie ich das Problem lösen kann :slight_smile:

Viele Grüße
Matthias Büge


(combit Support - Helge Wysoszynski) #2

Sehr geehrter Herr Büge,
vielen Dank für Ihren Beitrag.

Das von Ihnen gewünschte Ziel kann beispielsweise über folgenden .NET Code erreicht werden:

        [code]ListLabel LL = new ListLabel();

LL.AutoProjectType = LlProject.Card;
LL.AutoProjectFile = “test.crd”;

LL.DataSource = new List { " " };

foreach (DataTable table in ds.Tables)
{
	foreach (DataRow row in table.Rows)
	{
		foreach (DataColumn column in table.Columns)
		{
			LL.Variables.Add($"{table.TableName}.{column.ColumnName}", row[column]);
		}
	}
}

LL.Design();
[/code]
Alternativ würden Sie eine eigene Druckschleife benötigen. Detaillierte Informationen hierzu entnehmen Sie bitte Ihrer mitgelieferten Programmierer-Referenz aus dem Kapitel “5.5.1 Verwendung einer eigenen Druckschleife”

Mit freundlichen Grüßen

Helge Wysoszynski
Technischer Support
combit GmbH