Klasse wahlweise einbeziehen

  • VB.NET
  • .NET 7–8

Es gibt 53 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    @EDR:
    ich hoffe, du weisst, was der SolutionExplorer ist
    Wie gesagt: Poste einen Screenshot von deim typDataset im Dataset-Designer
    Doppelklick auf die *.xsd-Datei

    Ich arbeite im VS immer mit geöffneten SolutionExplorer. Aber ich habe dort keine .xsd ???
    Ich glaube, dass ich gar kein typisiertes DS habe. Habs ja auch so erstellt (#1):

    VB.NET-Quellcode

    1. ds = New DataSet
    2. ds.ReadXmlSchema(Application.StartupPath & "\GevkoBQ\gevkobq.xsd")
    3. ds.ReadXml(Application.StartupPath & "\GevkoBQ\gevkobq.xml", XmlReadMode.ReadSchema)

    EDR #4:
    ähm - laut deines Codes erstellst du aber überhaupt kein typisiertes Dataset

    Haudruferzappeltnoch #13:
    Das ist bei 47 Tabellen natürlich sehr mühselig, da kann ich verstehen, wenn man das alles in ein untypisiertes Konstrukt haut.

    Dann werde ich wohl in unendlicher Tipparbeit das Projekt zu Ende bringen müssen ... :cursing:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „strzata“ ()

    strzata schrieb:

    \GevkoBQ\gevkobq.xsd
    Das könnte eine typisierte Dataset-Datei sein, die man ins Projekt einbinden könnte, und dann mit Doppelklick im DatasetDesigner öffnen.
    Möglicherweise ist da aber auch ein ganz anderes Schema definiert - nicht kompatibel mit dem Dataset-Designer.
    Aber das siehste dann ja.

    Der allgemeine Hintergrund: *.xsd ist eine "Xml-Schema-Definitions"-Datei. Da wird die Struktur einer Xml-Datei definiert, also an welcher Stelle welche Xml-Tags erwartet werden, und was in was eingeschachtelt sein darf usw usf.

    Eine typDataset-*.xsd - Datei definiert die Struktur eines typisierten Datasets - ist also ein Spezialfall.
    Solche *.xsd-Files werden beim Doppelklick im SolutionExplorer vom Dataset-Designer eingelesen.

    Wenns klappt haste gewonnen, weil der Dataset-Designer ist ein sehr komfortables Tool, um auch höchst komplexe (und 47 Tabellen ist schon allerhand!) Datenmodelle zu untersuchen.
    Ausserdem generiert der Dataset-Designer die nötigen Klassen, um Daten einzulesen, zu bearbeiten, abzuspeichern, die der Struktur dieses Datenmodells entsprechen.

    Das erspart unendlich Tipparbeit ;)
    @EDR:
    Das ist ganz lieb von Dir, dass Du mich nicht hängen lassen willst und Du hast meine grösste Hochachtung. Danke! Ich sah mich schon den Rest der Woche meine Finger wund tippen. Aber vielleicht bleibt mir das sowieso nicht erspart.

    Die gevkobq.xsd (gevkobq.xsd.png ) habe ich mit der xsd.exe selbst erstellt (xsd-exe.png), da mit den mitgelieferten xsd's (xsd-Dateien.png und bq_root_V3.06.xsd.png) das Erstellen des DS nicht funktioniert hat. Meine gevkobq.xsd lässt sich aber nicht ins Projekt einbinden (Verweis.png). Aber da mache ich bestimmt dabei einen Fehler.

    der Dataset-Designer ist ein sehr komfortables Tool

    Hab Deine Videos alle schon bewundert!
    Bilder
    • gevkobq.xsd.png

      32,35 kB, 1.236×334, 28 mal angesehen
    • xsd-Dateien.png

      9,5 kB, 493×105, 26 mal angesehen
    • xsd-exe.png

      9,1 kB, 564×93, 23 mal angesehen
    • bq_root_V3.06.xsd.png

      54,44 kB, 755×847, 26 mal angesehen
    • Verweis.png

      36,48 kB, 764×473, 25 mal angesehen
    Interessant, wenn die xsd das passende Format hat, ist das ja schnell gemacht.

    Wenn es zur Bedienung des Studios kommt, bin ich auch schnell raus.
    Aber eine narrensichere Methode ist: leeres Dataset im Projekt erstellen, speichern, schließen, die vorhandene xsd-Datei rausschmeißen und mit deiner Datei ersetzen.
    leeres Dataset im Projekt erstellen, speichern, schließen, die vorhandene xsd-Datei rausschmeißen und mit deiner Datei ersetzen.

    Hurra! Oh ein Wunder! Ich bekomm den Mund gar nicht wieder zu ...
    Kommen wir jetzt vielleicht doch noch zum Ziel und ich brauch nicht zu viel zu tippen?
    Das wichtigste wäre zunächst, dass ich zu jeder Regel, die eindeutig ist (jede kommt nur 1x vor) den entsprechenden Text bekomme. Später kommen dann noch Bedingungen hinzu (Alter, Geschlecht usw.) und verlinkte PDFs (viele zu einer Regel).
    Bilder
    • DataSet.png

      43,13 kB, 1.354×740, 27 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „strzata“ ()

    Das DataSet heißt jetzt? DataSet1? Und die Instanz davon auf dem Form? DataSet11?
    Wie dem auch sei, ich nenne es gern DS1, da ich eh nie mehr als ein DataSet habe.

    Hast du eine Regel-ID, dann sind das alle Text-Datensätze bzw. alle Texte:

    VB.NET-Quellcode

    1. Dim RegelID = 42
    2. Dim Texte42 = DS1.regel.FindByregel_Id(RegelID).GettextRows
    3. Dim echteTexte42 = Texte42.Select(Function(t) t.text_Text).ToArray
    Wird wohl noch ein paar Hürden geben, mit denen ich mich rumschlagen muss.
    Erster Anlauf: IntelliSense zeigt mir nach dem Punkt hinter Regel nichts an. Hat das DataSet1 überhaupt schon die Xml drinne? Ich hab da ja nirgends etwas angegeben.
    Bilder
    • Bild1.png

      5,64 kB, 346×122, 20 mal angesehen
    Jo, dir fehlt wie geschrieben die Instanz aufm Form. Das sind die aber nu die harten Basics, das hat nichts mehr wirklich speziell mitm DataSet zutun. Die blaue Farbe von DataSet1 zeigt dir an, dass DataSet1 der Name der Klasse ist. Private DS = New DataSet1, so wie du vorher auch das untypisierten DataSet instanziert hast. Nur besser als ReadOnly Klassenvariable (also außerhalb der Methode)

    Du kannst auch ein DataSet wie n Button aus der Toolbox aufs Form ziehen.

    Es gibt/gab aber einen Bug diesbezüglich. Falls der noch in NET 8 vorliegt, wird dein Form ganz jämmerlich anfangen komische Fehlermeldungen anzugeben.
    Als Work-Around:
    Im Solution-Explorer machst du einen klick auf DataSet1.xsd.
    Im nun eingeblendeten Eigenschaftsfenster gibst du bei "Namespace des benutzerdefinierten Tools" Global .MeinProjektName ein. Das Leerzeichen vor dem Punkt ist gewollt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Da muss ich jetzt echt resignieren und das Handtuch werfen. Alle Vorschläge (Toolbox DS aufs Form ziehen oder Namespace) fruchten nicht. Wenn ihr meint, dass ich da Lücken in den "harten Basics" habe, kann ich euch mit meinem Problem nicht weiter nerven. Da werde ich mich wohl erstmal trotz Termindruck in den nächsten Wochen mit den Grundlagen beschäftigen müssen.

    Eure uneigennützige tolle Hilfe war bewundernswert und ich danke allen von ganzem Herzen. Zumindest habe ich das mit dem Singleton verinnerlicht und verwendet. Das hat mich schon ein ganzes Stück weitergebracht.

    Viele Grüße
    Norbert
    Siehst du denn dein DataSet1 in der Toolbox?

    Leider Nein. Nur bq ist zu sehen (ToolBox.png).
    Die Klasse frmBehaQuali zeige ich so (alterCode.png) wie sie bisher war.
    Und was kriegst du da für einen Fehler, wenn du sagst, dass das nicht geht?

    Ich Dummy hatte das DataSet aus den Ordner "Alle Windows Forms" gezogen.
    Der Code von "Aufruf.png" liegt in der Klasse CKrkDiag.vb im StartProjekt Main (wird aber unbedeutend sein).
    Danke, dass Du's nochmal anfasst!
    Bilder
    • ToolBox.png

      3,73 kB, 202×138, 183 mal angesehen
    • SolExplorer.png

      10,66 kB, 208×367, 20 mal angesehen
    • Aufruf.png

      24,59 kB, 359×104, 20 mal angesehen
    • alterCode.png

      29,41 kB, 634×532, 22 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „strzata“ ()

    Dann hast du noch nicht kompiliert seitdem das DataSet1 drin und fertig ist. Danach taucht es auch in der Toolbox auf.

    Hier wie dein Code angepasst werden müsste (ohne Toolbox/Form-Nutzung). Du siehst: Es ändert sich beim Lesen gar nichts. Beim Benutzen allerhand.

    VB.NET-Quellcode

    1. Private ReadOnly ds as DataSet1
    2. Private Sub New()
    3. InitializeComponents()
    4. ds = New DataSet1
    5. End Sub
    6. Private Sub frmBehaQuali_Load(sender as object, e as EventArgs) Handles Me.Load
    7. ds.ReadXml(Path.Combine(Application.StartUpPath, "GevkoBQ\gevkobq.xml"), XmlReadMode.ReadSchema)
    8. End Sub
    9. Private Sub Test
    10. Dim x = ds.regel
    11. End Sub

    Erklärung:
    Im Konstruktor solltest du keine Daten einlesen. Das hast du doch im Eingangspost festgestellt, was das für Limitierungen mit sich bringt. Besser im Load oder Shown Event. Deswegen lasse ich auch das .Show weg. Weil, wenn das im Konstruktor steht, dann kann man sich das auslagern in die Events auch wieder schenken. Lass lieber den Ersteller des Forms entscheiden, wann es ge-show-t wird
    XmlReadSchema können wir uns generell schenken, wenn wir XmlReadMode.ReadSchema im ReadXml benutzen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Danke!
    Hatte schon mehrfach die Solution kompiliert ("Projektmappe neu erstellen"). Jetzt kompiliert VS nicht mehr, wohl wegen Fehler in Zeile 9, denn DataSet1 wird immer noch nicht gefunden. Gibts auch nicht in der ToolBox. Und es gibt zwei Warnungen im DataSet1.Designer
    Bilder
    • Fehler Zeile 9.png

      23,93 kB, 796×368, 21 mal angesehen
    • Fehlerliste.png

      10,97 kB, 1.187×85, 18 mal angesehen
    • Fehler.png

      13,87 kB, 722×155, 25 mal angesehen
    Jo, und GetTypedDataSetSchema deutet doch daraufhin, dass da irgendetwas vernünfitges zuhause ist.
    Noch einmal: Die hellblaue Schriftfarbe deutet an, dass es sich um den Namen einer Klasse handelt, in Post 28 ist DataSet1 hellblau.
    In Post 34 isses schwarz. Da vermisst Intellisense also was, was vorher noch da war. Wenn du da n Punkt hinertsetzt, wird Intellisense dir gar nichts mehr vorschlagen.
    Kannst du Post 28 reproduzieren? Was hat sich geändert?

    Haudruferzappeltnoch schrieb:

    Kannst du Post 28 reproduzieren? Was hat sich geändert?

    Ja, kann ich. Folgende Steps:
    - alten Code aus #32 verwendet
    - im Sol.Expl. DataSet1 entfernt
    - dann Projekt - Hinzufügen - Neues Element - DatSet
    - ds = NewDataSet1 ist jetzt blau
    - kompiliert
    - jetzt sehe ich DataSet1 im Komponentenfach und in der ToolBox
    - VS geschlossen
    - im WindowsExplorer DataSet1.xsd umbenannt
    - gevkobq.xsd reinkopiert und umbenannt in DataSet1.xsd
    - VS neu gestartet
    - Code nach #33 geändert

    Das DataSet1 ist leider leer (enthält keine Tabellen).
    ds.ReadXml(... funktioniert nicht???

    strzata schrieb:

    Das DataSet1 ist leider leer (enthält keine Tabellen)
    Aber in Post 25 hattest du zu diesem Zeitpunkt Tabellen in DataSet1 oder wo kommt das Bild her? Das ist ein Punkt der etwas weniger offensichtlich ist für mich. Da hat es geklappt und jetzt nicht mehr?

    Im Studio musst du noch alles was DataSet1 heißt in gevkobq zurück umbenennen. Deswegen kann der nix Daten einlesen.
    (Siehe da auch EdRs Methode aus Post 27 zum eigentlichen Hinzufügen eines fremden DataSets, da hat man diese Problematik nicht)

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Ein Doppelklick auf DataSet1.xsd im SolutionExplorer zeigt mir auch dasselbe an wie in #25
    Zur Laufzeit sind aber im ds keine Tabellen.

    Wenn ich im Load die Zeile
    ds.ReadXmlSchema(Application.StartupPath & "\GevkoBQ\gevkobq.xsd")
    nicht weglasse, sind die 47 Tabellen im ds drin.
    Vielleicht braucht es das?

    Wie dem auch sei. Kannst Du mir jetzt zeigen, wie ich auf die Values zugreifen muss? Wenn ich das erste Beispiel begriffen habe, werde ich mein Projekt wohl doch noch kurzfristig fertigstellen können.
    Also ein Beispiel:

    Ich habe einen ICD-Schlüssel. Der kommt in der Tabelle "icd" kein Mal oder nur einmal pro Datensatz vor
    Wenn er in der Tabelle "icd" gefunden wird, muss ich mit der in der Spalte "indikator_id" angegebenen ID in der Tabelle "indikator" suchen
    dort steht dann in der Spalte "bq_regelung_intervall_id" eine ID, mit der ich in der Tabelle "regel" suchen muss

    Wenn ich die Regel habe, kann ich damit 90% der Anforderungen erschlagen, denn in den meisten Tabellen finde ich die Werte anhand der Regel_ID.
    Also z.B. auch die verlinkten PDFs und die zu jeder Regel hinterlegten Texte.

    Im Studio musst du noch alles was DataSet1 heißt in gevkobq zurück umbenennen. Deswegen kann der nix Daten einlesen.

    Leider zu spät gesehen. Beschäftige mich nach dem Mittag damit. Danke.

    Bilder
    • Explorer.png

      21,23 kB, 866×351, 26 mal angesehen
    • Xml.png

      39,39 kB, 620×419, 24 mal angesehen