Zu 1, muss ich noch mal nachschauen.
Zu 2, der Report ist unabhängig deiner Anwendung. Wenn sich der Dateiname des Reports und die Datenstruktur nicht ändert, kannst du diese einfach ersetzten.
also man kann bei CrystalReports Gruppen bilden.
Gruppen stellen immer Subelemente (Untertabellen) dar. Diese können auch wieder Kopf, Details und Fuß haben.
Um den Baum dann visuel abzubilden müßte ich dann x-mal die Tabelle durchlaufen und Id's vergleichen ob ein SubElementId nochmal in einer Zeile als Id vorkommt?
ich habe hier eher eine konzeptionelle Frage.
Ich habe eine Struktur die einem Baum ähnelt. Etwa 10 Ebenen tief und hunderten von Einträgen.
Meine Frage, wie speichere ich den Baum in einer DB? DB deshalb weil Elemente auf Daten verweißen welche sich gut in einer DB abbilden lassen. Werden aber auch zig Tabellen.
Ich glaube irgendwie stehe ich jetzt auf der Leitung.
Bilde ich für jede Ebene dann eine Tabelle mit 3 Spalten (Id, ElementName, SubElementId).
Das Problem, ich müßte später Knoten an einer definierten Stelle einfügen können, als DB Anweisung wüßte ich da jetzt garnicht weiter.
Z.B. eine Struktur eines Autos.
Auto -> Antrieb -> Motor -> Getriebe -> Zahnräder ->
Auto -> Antrieb -> Motor -> Zylinder -> Kolben -> Kolbenring -> ...
Auto -> Karosserie -> Tür -> Türgriff
Jedes Element könnte jetzt Eigenschaften wie Spezifikation, Zeichnung, Gutachten, Konformitätserklärung, usw. haben.
Also das der nur die oberste Ebene durchsucht liegt daran das du die Elemente auf Unterelemente abfragen musst.
z.B. 'nodes.Nodes.Count > 0'
Dann würde das Sortieren ansich funktionieren. Nur soweit ich mich noch erinnern kann musst du beim TreeNode die Elemente per Hand vertauschen um ein Sortieren zu ermöglichen.
z.B.
Remove(node1)
Remove(node2)
Insert(0, node2)
Insert(1, node1)
Kommen die Leerzeilen zustande weil den statischer Text nicht in eine Zeile passt?
Generel wird der Abstand einer Reihe von der Höhe deiner Section 'Details' festgelegt.
Mehr Abstand wirds nur wenn das Feld die Eigenschaft 'Multiline' (oder so ähnlich) hat, ansonsten wird der String abgeschnitten wenn die Feldlänge nicht ausreicht.
Bin mir nicht sicher ob ich dich richtig verstanden habe,
also CrystalReports benötigt erstmal die Struktur der Daten.
Entweder man läßt CrystalReports direkt auf eine Datenbank verbinden oder man übergibt ein Schema im XML Format.
Als nächstes benötigt CrystalReports die Daten. Entweder läßt du wieder direkt auf die DB zugreifen oder du übergibst ein DataSet.
In deinem Fall würde ich mein DataSet zusammenstellen (Tabellen, Relations usw.) und dann das Schema über die Methode DataSet.GetXmlSchema() bzw. WriteXmlSchema() als XML-File speichern.
Dann öffenst du den CrystalReports Designer und gibst als Datenquelle das XML File an.
Nun kannst du deinen Berichtsformular gestallten.
Zum Anzeigen deines Reports benötigst du den 'CrystalReportviewer'. Dieser hat die Eigenschaft 'ReportSource'. Hier kannst du ein Object vom Typ 'ReportDocument' übergeben. Im ReportDocument setzt du nur noch die DataSource und den CrystalReport welcher mit dem Designer erstellt wurde.
Und voala, fertig ist der Report...
Hier ein bischen Code:
ReportDocument newReport = new ReportDocument();
newReport.Load(MyReport.rpt);
newReport.SetDataSource(MyDataSet);
crystalReportViewer.ReportSource = newReport;
.
Nachtrag:
Da du nur eine Unterauswahl der Daten anzeigen möchtest, wäre es Praktisch dem Report ein DataView zu übergeben. Leider funktioniert das nicht, so das du wohl oder übel ein passendes DataSet aus einer View oder aus einer entsprechenden SQL Abfrage erstellen mußt.
ich habe folgendes Problem.
Meine Applikation ist ein MDIContainer/Form (wie sagt man?)
Wenn ich Childforms aktiviere welche Application.EnableVisualStyles();
aufrufen, dann wird nach dem 3. MDIChild eine Ausnahme
'System.Runtime.InteropServices.SEHException' geworfen.
Verwenden die ChildForms das Application.EnableVisualStyles() nicht, lauft alles wunderbar.
Weiß jemand sich das so verhält?
Denn bis vor 2 Tagen gab es dieses Problem nicht.
Danke für die Info. Ich habe jetzt den Fehler gefunden.
Ich trau es mir garnicht sagen. Da wurde das Event für Closing abgefangen. Das Fenster wurde nur versteckt [Hide()].
Der Codeüberbleibsel war noch aus den Anfängen meines Pluginkonzepts.
Und zu guter letzt ist das Plugin überhaupt nur gelaufen weil ich an anderer Stelle auch noch einen Fehler drinn hatte.
2 Fehler heben sich halt fast wieder selbst auf (!(!a) == a)...
ich habe ein seltsammes Problem.
In der Menübar habe ich einen Item die MDIChildList Eigenschaft gegeben. Hier werden nun automatisch die Subfenster angezeigt.
Leider verschwindet ein Form beim Schließen nicht aus der Liste. Vielleicht ein eher exotisches Problem, nur weiß ich nicht wo ich da überhaupt das Suchen anfangen soll. Zumindest ist das immer beim gleichen Form.
Geschlossen wird das Form, wie auch alle anderen, mit this.Close().
Ich wollte den XMLSerializer benutzen, da gibts das ISerializable Interface nicht.
Zwar sieht das mit dem IXmlSerializable nicht so doll aus, dafür erkennt man im XML File nicht das es sich hier um ein weiteres Object handelt.
auch eine benutzerdefinierte Serializierung bei XML wollte nicht so wie ich.
Jetzt habe ich einfach einen neuen Datentyp erstellt 'CryptString' mit noch bischen was ausenherum. Für geschützte Felder im XML File wird dieser Typ verwendet.
keiner eine Idee wie man das am besten angehen könnte?
Ziel ist es eine Klasse zu serializieren welche das. Im XML File sollen die Werte der Elemente verschlüsselt sein. Z.B. Datenbankinformationen. Zum Serializieren von Klassen habe ich einen ClassSerializer welcher Pfad, Type und ne Referenz bekommt.
Evtl. einen eigenen Streamwriter schreiben welcher verschlüsselt und diesem dem XMLWriter übergeben, oder vielleicht mit Attributen Properties kennzeichnen welche verschlüsselt werden sollen.
Wäre für Ratschläge einer eleganten Lösung dankbar.
ne leider ist das nicht so einfach. Liegt vermutlich an der doch recht kurzen Beschreibung des Problems von mir.
Ist der Benutzer nicht berechtigt oder bestätigt er eine Warnung mit Nein, muss eine weitere Fortführung welchess das Control bewirkt unterbunden werden. Bequem wäre das ChangedEvent. Doch wenn ich selber den Hacken setzte wird ja das Event wieder geworfen.
Das reagieren auf Click geht schon in die richtige Richtung, nur kann das Control auch anders z.B. Tastatur aktiviert werden. Also man müßte auf mehrere Events reagieren welche den Code nur aufblähen.
Werde das Control nun doch richtig erweitern.
Danke für eure Hilfe...
Oh man... Jetzt fehlt bei 'ner ComboBox auch so 'nen Event...
danke für die Info. Hilft mir echt weiter. Allerdings darf dann das CheckedChanged Event nicht benötigt werden. Sonst endet das ganze in einer Endlosschleife.
@S.H.-Teichhof
beim Aktivieren des Hackens soll der Benutzer auf etwas aufmerksam gemacht werden. Wenn dann mit 'Nein' bestätigt wird, muss die Aktivierung unterbunden werden.
ich suche ein Event für die CheckBox welches Eintritt bevor der Hacken gesetzt wird und man die weitere Fortführung auf Cancel setzten kann.
Würde meine Validierung ergeben das ich Checked auf false setzten muss, dann wird das Event ja nochmal aufgerufen.
Hab mir das jetzt mal genauer angeschaut. Letztendlich passiert da dasgleich, dass manuel eine Table erzeugt wird. Ist für manche Probleme sicher ganz praktisch.
Mir langt es für diesen einen Fall einen Filter über DataView zu setzten und dieses vor der Rückgabe dann nochmal neu zu verpacken. Prinzipiell können ja doch viele Klassen mit dem DataView etwas anfangen.
Wie kann ich aus einem DataView (abgeleitet aus einem DataSet) ein neues DataSet erstellen.
Problem:
CrystalReport kann mit einem DataView nichts anfangen und verlangt ein DataSet. Wenn man nun einen Unterauswahl anzeigen möchte, müßte man eine neue DB-Abfrage starten und einen Filter einsetzten.
Diesen Umweg wollte ich mir aber ersparen.
Wenn du Submit klickst wird das Layer eingeblendet bis der Server sich wieder zurück melded. Oft blende ich die Ebene über wichtige Buttons ein damit diese wärend der Verarbeitung nicht nochmal geklickt werden können.
Also ich blende immer ein Layer ein wo irgendein "ich arbeite Animation" läuft.
Das Submit wird über ein JavaScript aufgerufen welches vorher die Ebene visible setzt.
Wenn die Seite dann neu aufgebaut wird, ist die Ebene ja wieder ausgeblendet.
ich möchte gerne meine UserControls in eine dll auslagern.
Wenn ich das richtig verstanden habe, ist das nur mit CustomControls möglich.
Gibt es einen einfachen Weg die doch recht schnell erstellbaren und leicht veränderbaren Usercontrols in CustomControls umzuwandeln?
Den HTMLCodo mit nem TextWriter zu erstellen ist doch recht mühselig und wenn man was ändern muss könnte ich mir vorstellen wird man nicht mehr glücklich.
Bin in dem Gebiet jetzt auch kein Fachmann.
Da er den Typ nicht kennt glaube ich du dem sagen das es ein UnmanagedType ist.
Da gibts ein Attribute [marshal(UnmanagedType.TYPE)] gefolgt von einem c# Typ.
FT_HANDLE müßte dann mit diesem ersetzten.
Type denke ich wäre hier LPVoid
Also ungefähr so. Aber ohne Gewähr ;-)
[marshal(UnmanagedType.LPVoid)]uint* ptr