Klasse wahlweise einbeziehen

  • VB.NET
  • .NET 7–8

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

    strzata schrieb:

    ds.ReadXmlSchema(Application.StartupPath & "\GevkoBQ\gevkobq.xsd")
    nicht weglasse, sind die 47 Tabellen im ds drin.
    Vielleicht braucht es das?
    Wenn Dim test = ds.icd nun funktioniert, dann ok. Die Doku die sagt zwar das wäre überflüssig, aber vielleicht behebt das die Namenskonflikte, die wir uns duch das Copy&Paste reingeholt haben.

    strzata schrieb:

    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
    Hier genau auf die Begrifflichkeiten achten.
    Die Tabelle icd hat keine Primärschlüsselspalte angegeben. Deswegen bleibt nur LINQ-Suche.

    VB.NET-Quellcode

    1. Dim suchV = "DiesesV"
    2. Dim icdLookUp = ds.icd.FirstOrDefault(Function(x) x.V = suchV)
    3. If icdLookUp is Nothing Then Throw New Excetion("Nicht gefunden")
    4. Dim GefundeneRegeln = icdLookUp.indikatorRowParent.bq_regelungRowParent.GetregelRows

    Haudruferzappeltnoch schrieb:

    Im Studio musst du noch alles was DataSet1 heißt in gevkobq zurück umbenennen.

    Verwirrt mich etwas. Im Studio heissen doch alle DataSet1.xxx
    Soll ich die alle in gevkobq.xxx umbenennen?
    Und Copy&Paste hab ich nicht gemacht. Hab's im WindowsExplorer umbenannt. War das falsch?
    In #27 added EDR ja ein vohandenes DataSet. Wenn ich das vorhandene gevkobq hinzufüge (statt einem neuen DataSet), bekomme ich im Code keinen Verweis darauf. Es erscheint auch nicht im Komponentenfach.

    Übrigens ds.icd klappt nicht (Fehler BC30456 "icd" ist kein Member von "DataSet1". SelektivVertraege D:\VBEntwicklung\ML5.1.0.22\SelektivVertraege\frmBehaQuali.vb 36 Aktiv)
    Aber das geht:
    Dim viewICD = ds.Tables("icd").DefaultView

    Bilder
    • Expl.png

      2,14 kB, 202×69, 87 mal angesehen

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

    Ok, ich hab es fast befürchtet. Du hast nu zwar den Designer und du hast Daten aber die Art und Weise wie wir beides hinbekommen haben passt noch nicht zusammen.
    Deine Daten liegen in untypisierte Form vor und dein typisiertes DataSet ist leer.

    strzata schrieb:

    Und Copy&Paste hab ich nicht gemacht. Hab's im WindowsExplorer umbenannt. War das falsch?
    Ne, also es war zumindest das, was ich meinte, nur hats nichts getaugt.

    Was EdR gezeigt hat funktioniert einwandfrei, ich hab das Spiel jetzt nochmal am Stück durchgespielt, bei mir geht das. Nur die Datendatei kann ich nicht mehr prüfen, denn die hab ich ja nicht hier. Hier die Dia-Show
    Bilder
    • 1.png

      23,44 kB, 700×244, 8 mal angesehen
    • 2.png

      20,73 kB, 682×204, 6 mal angesehen
    • 3.png

      44,09 kB, 943×530, 5 mal angesehen
    • 4.png

      9,44 kB, 485×279, 4 mal angesehen
    • 5.png

      38,94 kB, 798×516, 5 mal angesehen
    • 6.png

      33 kB, 752×269, 5 mal angesehen
    Du hast Dir ja eine ungeheure Mühe gemacht. Danke!
    Im Unterschied zu Deinen Bildern erscheint die gevkobq.xsd mit 3 untergeordneten Datein sofort im Solution Explorer wenn ich sie in den Ordner kopiere. Ich füge sie dann auch nicht einem Form hinzu, sondern adde sie dem Projekt "SelektivVertraege". Der DataSetExplorer zeigt mir auch danach alle 47 Tabellen mit Doppelklick auf die xsd an. Danach kompiliert. Aber weder in der ToolBox noch im Komponenetenfach wird das DS sichtbar. Liegt bestimmt an der xsd. Ist vielleicht gar kein echtes DataSet. Soll ich sie hier mal hochladen oder kann ich sie Dir mal schicken (PN 15 kB)? Die Xml ist größer. Ich befürchte, die habe ich gar nicht im Projekt. Muss die nicht auch in den Solution-Ordner? Und in der ToolBox lungert noch in den SelektivVertraege-Komponenten ein bq rum. Sollte man das wegmachen?
    Bilder
    • SolExplorer.png

      9,21 kB, 198×323, 8 mal angesehen

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

    Doch doch, ist echt, haben wir doch schon gesehen. Du hast auch schon bei den vorigen Versuchen mal gesagt das DataSet wäre in der Toolbox erschienen.
    Remember: Das Hinzufügen der xsd haben wir nur gemacht, damit du die Tabellen nicht selbst von Hand tippen musst und das klappt ja auch.

    strzata schrieb:

    SelektivVertraege-Komponenten ein bq rum. Sollte man das wegmachen?
    Wüsste nicht warum. Edit: Weißt du was das ist? Vielleicht ist das das DataSet. Guck im DataSet-Designer Eigeschaftenfenster wie der Klassenname ist, vielleicht steht da "bq"

    strzata schrieb:

    Die Xml ist größer. Ich befürchte, die habe ich gar nicht im Projekt. Muss die nicht auch in den Solution-Ordner?
    Ne, Daten müssen liegen dürfen, wo sie wollen, du gibst ja den Pfad im Code an. Du sagst im Application.StartUpPath, andere packen sowas in den AppData-Ordner von Windows.



    Aber gut, es gibt natürlich auch weiterhin die Möglichkeit ohne Toolbox, du siehst es ist dasselbe in grün, nur der Name des DataSets hat sich geändert:
    Erst die Edit-Frage klären

    VB.NET-Quellcode

    1. Private ReadOnly DS as gevcobq
    2. Public Sub New()
    3. InitializeComponents()
    4. DS = New gevcobq
    5. End Sub
    Das ist am Ende nichts anderes als was der Form-Designer bei sich hinschreibt, wenn du das Dingen aus der Toolbox ziehst. (Nur heißts dann Gevkobq1 statt DS)

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

    strzata schrieb:

    Liegt bestimmt an der xsd. Ist vielleicht gar kein echtes DataSet. Soll ich sie hier mal hochladen
    das wär nett.
    Ich bin auch höchst verwundert, dass du die überhaupt in einen DatasetDesigner laden kannst. Die Snippetse daraus, die ich bislang gesehen hab, sehen garnet wie Dataset-Xsd aus (aber ich lern gern mal was neues)
    gevkobq.xsd konnte ich nicht hochladen. Hätte eine ungültige Dateiendung. Hab sie in .txt umbenannt.
    Hab auch die 3 mit der Xml zusammen gelieferten xsd's hochgeladen (auch umbenannt in .txt)
    Die in meinem Projekt verwendete gevkobq.xsd habe ich ja selbst mit der xsd.exe erstellt. Ob das so richtig war? (#23)
    Dateien
    • gevkobq.xml

      (3,25 MB, 8 mal heruntergeladen, zuletzt: )
    • gevkobq.txt

      (17,37 kB, 7 mal heruntergeladen, zuletzt: )
    • bq_body_V3.06.txt

      (28,69 kB, 3 mal heruntergeladen, zuletzt: )
    • bq_header_V3.06.txt

      (8,33 kB, 5 mal heruntergeladen, zuletzt: )
    • bq_root_V3.06.txt

      (2,52 kB, 5 mal heruntergeladen, zuletzt: )
    tja, das Ding ist nicht wirklich eine Dataset-Datei. Es konnte zwar DesignerCode generiert werden, der war aber ungültig, weil enthielt Relationen, die einander widersprechen.
    Wenn ich das fixen wollte, hatter gar keinen DesignerCode mehr generiert.
    Zur Info: Wenn kein DesignerCode generiert wird, dann gibts auch nicht die typisierten Tables, wo man so schön was reinladen kann und so.

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

    Huhu!

    Es ist mir nun doch noch gelungen, aus dem irregulären Dataset ein reguläres Dataset abzuleiten.
    Und dann lese ich ins irreguläre Dataset ein, und fülle alle Rows um ins Reguläre.

    Wenn das icd-Grid einen Datensatz anwählt, dann reagiert die angeschlossene BindingSource:

    VB.NET-Quellcode

    1. Private Sub bsIcd_CurrentChanged(sender As Object, e As EventArgs) Handles bsIcd.CurrentChanged
    2. Dim icd = bsIcd.At(Of icdRow)
    3. Dim indikator = icd.indikatorRow
    4. Dim bq_regelung_intervall = indikator?.bq_regelung_intervallRow 'ergibt oft auch Nothing
    5. Dim b = bsRegelIntervall.MoveToRow(bq_regelung_intervall) ' fokussiert das GUI auf die gefundene Regel (und alles was dranhängt)
    6. Dbg(b) 'debug-Ausgabe, ob der RegelIntervall-Move funztete
    7. End Sub


    guck, das ist der relevante Ausschnitt aus dem Datenmodell:

    Dateien
    • gevkob02.zip

      (349,91 kB, 25 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Was Du so alles treibst in der Nacht, tssss ;) Aber die Begeisterung bei mir ist riesig! Danke!
    Du erwartest bestimmt zu viel von mir, dass ich das schnell zum Laufen bringe ...
    Bilder
    • 1.png

      20,09 kB, 994×324, 4 mal angesehen
    • 3.png

      16,65 kB, 1.304×162, 5 mal angesehen
    • 2.png

      20,22 kB, 229×663, 7 mal angesehen
    Jetzt läuft es!
    Aber es ist der helle Wahnsinn. Um sowas zu programmieren würde meine restliche Lebenszeit (bin 80) niemals ausreichen. Und sowas macht Dir auch sonst niemand so schnell nach. Ich schaue da hinein wie ein Schw... ins Uhrwerk. Ob ich Deine Tricks alle durchschauen werde, ist zweifelhaft. Bei jeder zweiten Zeile muss ich Google fragen, was das bedeutet (z.B. Nops(Of T, T2) ist nur ein Beispiel von vielen, hab sowas noch nie gesehen).

    Hast Du den Code so gehalten, dass er auch noch funktioniert, wenn die KBV in Berlin durch ein Update etwas an der Struktur der Xml-Stammdatei ändern sollte?

    Ich weiss nicht, wie ich Dir danken soll!
    Norbert
    NOP heisst "No Operation" - das tut garnix. Mach ich manchmal hin, damit ich eine Befehlszeile hab, wo ich einen Haltepunkt setzen kann.
    Natürlich ists erstmal kaputt, wenn die Struktur der Daten zu tiefgreifend geändert wird (etwa Umbenennung von Tables).
    Dann muss man eine neue irreguläre .xsd erzeugen, daraus eine neu reguläre .xsd.
    Der Code zum Umwandeln der irregulären in eine reguläre, und das Einlesen und Umfüllen beim Daten-Laden ist aber schoma da.

    Aber dann muss man auch ein neues Form machen, weil die Databindings nicht mehr stimmen.

    Für dich ist erstmal wichtig, die typisierte Datenverarbeitung zu erlernen, also so Sachen, wie sie im .CurrentChanged stattfinden.
    Keine DataRows, DataTables, Dataviews, .DefaultView, .RowFilter etc. mehr! Also sowas wie in post#9 ist streng verboten.
    Jede typDataRow kennt ihre ParentRows und ihre ChildRows - da gibt es generierte typisierte Methoden und Properties für.
    Diese generierten Dinge, "Navigation-Member", folgen einem einheitlichen, leicht zu verstehenden Schema, sodass du im DatasetDesigner einfach guckst, wie heissen die verknüpften Tables, und dann weisste auch, wie die Methode oder Property heisst, die du brauchst, um von einem zum Andern zu kommen.
    die gezeigte bsIcd_CurrentChanged() ist ein gutes Beispiel dafür, und in meine Tuts sind noch mehr Beispiele.

    Das andere ist, Databinding einzusetzen.
    Meine Anwendung präsentiert dir ja glaub 6 Tabellen, die alle miteinander zusammenhängen, also zu jedem gewählten icd (was immer das sein mag) kriegst du eine wahre Flut an Information.
    Aber an Code sinds nur die gezeigten 7 Zeilen.
    Alles andere wird durch die BindingSources gesteuert, die in richtiger Weise miteinander verknüpft sind (und daran hängen widerum die Datagridviews)

    Ansonsten folgt die App bereits ansatzweise meinem "dataset-driven-Development"-Pattern:
    GUI, Daten, Business-Logic und Helpers sind getrennt, oder zumindest leicht trennbar (das Laden müsste eiglich in dts.logic.vb - aber ist ja nur auf die Schnelle zusammengeschustert)
    Und die Daten sind im Dataset organisiert, und davon gibt es nur ein einziges in der ganzen Anwendung (das immerhin ist schon in der .logic.vb).