Laden...

MemoryStream expandable erzeugen

Erstellt von Campy vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.052 Views
C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 11 Jahren
MemoryStream expandable erzeugen

Hallo zusammen,

ich erstelle in meinem Programm aus einem Base64String einen MemoryStream.
Dieser wird dann an List&Label übergeben und kann dort bearbeit werden. Leider kann der Stream aber nicht durch List&Label vergrößert werden was in einer NotSupportedException endet:

 byte[] reportBytes = Convert.FromBase64String(data.ReportDefinition);
                        using (MemoryStream ms = new MemoryStream(reportBytes))
                        {
                            ll.Design(LlProject.List, ms);
                            SaveReportStreamToDatabase(ms);
                        }

Wie kann ich diesen Stream expandable "machen"?

Vielen Dank!
Campy

A programmer is just a tool, which converts coffeine into code! 🙂

M
53 Beiträge seit 2008
vor 11 Jahren

Moin Campy,

mit dem passenden Konstruktor geht das.

Gruß
muhtanten

C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 11 Jahren

Hi muhtanten,

ein writeable reicht jedoch nicht?
Oder welchen meinst du?

Vielen Dank!
Campy

A programmer is just a tool, which converts coffeine into code! 🙂

M
53 Beiträge seit 2008
vor 11 Jahren

den Parameterlosen Konstruktor meine ich.

siehe: MSDN - Memorystream

Gruß
muhtanten

C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 11 Jahren

Hallo muhtanten,

der Stream ist nun expandable!

                        using (MemoryStream ms = new MemoryStream())
                        {
                            ms.Write(reportBytes, 0, reportBytes.Length);

Jedoch kann nun List&Label nicht mehr mit diesem Stream (siehe Code) umgehen ..
Gibt es sonst noch einen Unterschied zwischen dem Konstruktor und der Write() Methode?

Gruß
Campy

A programmer is just a tool, which converts coffeine into code! 🙂

5.658 Beiträge seit 2006
vor 11 Jahren

Was ist eigentlich "List&Label"?

Weeks of programming can save you hours of planning

C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 11 Jahren

Hallo MrSparkle,

List&Label ist eine Reporting - Komponente:
Link zu Combit List&Label

Gruß
Campy

A programmer is just a tool, which converts coffeine into code! 🙂

5.658 Beiträge seit 2006
vor 11 Jahren

Ok, aber dann solltest du mal beschreiben, was die beiden Methoden eigentlich machen wollen/sollen:


ll.Design(LlProject.List, ms);
SaveReportStreamToDatabase(ms);

Kommt mir irgendwie komisch vor: Aus einem Stream Daten lesen und gleichzeitig den Stream vergrößern zu wollen. Da muß doch noch irgendetwas anderes dahinterstecken, und ich hab keine Lust in der List&Label-Doku danach zu suchen...

Christian

Weeks of programming can save you hours of planning

C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 11 Jahren

Oh entschuldigt bitte.

die ll.design() ruft den List&Label Designer auf, deswegen müssen die Änderungen anschließend auch wieder zurück in die Datenbank gespeichert werden (SaveReportStreamToDatabase()). Das Problem ist allerdings, dass es mit dem parameterlosen Konstruktor und der Write() Methode nicht funktioniert.

Wenn ich den weiter oben beschriebenen Konstruktur verwende wird der Designer geöffnet nur die Änderungen können nicht an den Stream weiter übergeben werden.

Gruß
Campy

A programmer is just a tool, which converts coffeine into code! 🙂

5.658 Beiträge seit 2006
vor 11 Jahren

ll.design() ruft den List&Label Designer auf, deswegen müssen die Änderungen anschließend auch wieder zurück in die Datenbank gespeichert werden (SaveReportStreamToDatabase()).

Also liest die design-Methode die Daten aus dem Stream und schreibt sie nach dem Bearbeiten wieder in den gleichen Stream zurück. Bist du sicher, daß es so gedacht ist? Was sagt die L&L-Doku dazu?

Weeks of programming can save you hours of planning

C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 11 Jahren

Es gibt natürlich noch eine Print() Methode die zum normalen ausdrucken verwendet wird. Jedoch kann und darf der Endkunde auch das ReportLayout anpassen.
Dazu wird eben die Design Methode aufgerufen.

In der ListLabel Doku steht dazu folgendes:

Projektdateien können auch direkt in Datenbanken gespeichert werden. Neben der Mög-lichkeit, diese direkt aus der Datenbank zu entpacken und im lokalen Dateisystem zu speichern kann diese Arbeit auch auf List & Label abgewälzt werden. Die Print und De-sign-Methoden haben Überladungen, die die direkte Angabe eines Streams erlauben.
Bei Verwendung dieser Überladungen sind einige wichtige Verhaltensänderungen zu beachten. Hintergrund für diese ist das Fehlen eines lokalen Dateikontextes und damit verbunden die fehlende Möglichkeit, neue Dateien anzulegen:
· Im Designer ist es nicht möglich, ein neues Projekt anzulegen
· Die Menüpunkte Datei > Speichern unter und Datei > Öffnen sind nicht verfüg-bar
· Die Projektbaustein-Funktionalität ist deaktiviert
· Drilldown ist nicht verfügbar
· Die Designerfunktion "ProjectPath$" ist nicht verfügbar
Für den Designfall kann es natürlich passieren, dass der übergebene Stream modifiziert wird. In diesem Fall müssen Sie nach Ende des Designs den aktualisierten Stream in die Datenbank schreiben.

A programmer is just a tool, which converts coffeine into code! 🙂

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Campy,

vermutlich musst du den Stream zurückspulen (Seek, z.B. SetPosition), nachdem du die Daten hineingeschrieben hast.

herbivore

C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 11 Jahren

Hallo herbivore,

du hattest Recht!!! Vielen Dank!
Ist auch irgendwie logisch dass man zurück an den Anfang muss ..

Gruß
Campy

leider brachte das auch keine Besserung.

Mit dem Konstruktor mit Parametern funktioniert das Öffnen, nur die Änderungen können nicht zurück in den Stream geschrieben werden.

Viele Grüße
Campy

A programmer is just a tool, which converts coffeine into code! 🙂

5.658 Beiträge seit 2006
vor 11 Jahren

Interessant, dann ändert der Designer also tatsächlich den Inhalt des Streams. Das bedeutet aber auch, daß du den Stream sowohl VOR als auch NACH dem Aufruf der design-Methode zurückspulen müßtest.

Christian

Weeks of programming can save you hours of planning