DataSet, Frage zum Binding

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    DataSet, Frage zum Binding

    Hallöchen,

    ich habe eine Frage:

    Ich habe in meinem DataSet drei DataTable (siehe Bild DataSet) und im Table dtInfo will ich eine Relation zu den anderen beiden Tables.
    Folgendes ist nun meine Ablauffrage:

    1. Eintrag in dtSoftware
    2. Eintrag aus dtSoftware wird in ComboBox für dtInfo angezeigt
    3. Eintrag aus Combobox und andere werden in dtInfo geschrieben.

    Wenn ich nun den Eintrag aus dtInfo im DGV auswähle, macht es Sinn diesen Eintrag ebenfalls in der Combobox anzeigen zu lassen (Binding findet ja noch mit dtSoftware statt) oder
    sollte ich generell EingabeMaske und AusgabeMaske voneinander trennen?

    Sozusagen soll dtInfo wie ein Auftrag aufgebaut werden. Hoffe mein Vorhaben ausreichend geschildert zu haben.

    Freue mich auf Feedback.

    Grüße
    Sam
    Bilder
    • DataSet.JPG

      33,41 kB, 468×290, 132 mal angesehen
    • Form.JPG

      640,18 kB, 1.014×672, 138 mal angesehen

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

    Wa? ?( Ich versteh leider nicht, was Du vorhast. Was ist für Dich "EingabeMaske"? Welche Daten gibst Du denn ein? von dtSoftware? dtInfo? Was ist "AusgabeMaske"? Eine Ausgabemaske ist ja normalerweise eine Infoanzeige für einen normalsterblichen Benutzer, der nix oder nur eingeschränkt Daten ändern darf/soll/kann. Daher ist eine Trennung sinnvoll. Oder soll das ein AdminTool werden?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Ja so in der Richtung, soll nur ein Changelog sein für Änderungen die vorgenommen wurden, an Software oder Hardware.
    Also die Eingabemaske ist ja der Bereich wo ich die Daten für dtInfo eintrage. Die werden dann ins DataSet übertragen und ich lade sie dann in ein DGV. Wähle ich dann im DGV einen Datensatz aus, soll dieser wieder in entweder den Eingabefeldern oder extra dafür erstellten Ausgabefeldern angezeigt werden (in den Eingabefeldern ist ja bereits ein Binding vorhanden aus z. B. dtSoftware oder dtHardware).
    Und meine Frage ist, ob es Sinn macht die gleichen Felder für Ein- und Ausgabe zu verwenden oder diese Besser zu trennen. Somit wäre Ausgabemaske ein Infofeld, dass aber auch zum Ändern genutzt werden soll (gibt keinen User der es verwendet aus die Berechtigten).
    Ah, jetze. Na, dann mach doch eine nicht-datengebundene CheckBox noch rein, die bestimmt, ob die Eingabe-CEs Enabled sind. Wenn nicht, ist's ne Info-Anzeige. Wenn doch, können Daten eingegeben oder geändert werden. Wenn nur bestimmte Leute Zugriff haben und das sehen sollen, wäre eine extra Infoanzeige in nem weiteren Formular m.E. Overkill. Ist die Frage, ob es Sinn ergibt, die Angucker und Bearbeiter zu trennen, also, dass dies nicht die selben Personen sind.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also soll die Checkbox einfach das Binding zwischen den DataTables steuern wenn ich das richtig verstehe?
    z. B. CE = True dann Binding an dtInfo CE = False Binding an dtSoftware und dtHardware etc.?

    EDIT:
    In dem Sinne sind die "Angucker" auch diejenigen die "Bearbeiter" sind, gibt nichts dazwischen.

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

    Naja, nee. Die Checkbox sollte eigentlich nur die Comboboxen aktivieren oder deaktivieren, aber nicht das Binding ändern. Aber wenn Bearbeiter=Angucker, dann ist das wohl überflüssig.
    Bilder
    • CheckBoxActions.png

      2,82 kB, 402×279, 111 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wenn ich nun die ID des jeweiligen Wertes aus dtSoftware oder dtHardware mit in dtInfo eintragen will, aber in der EingabeMaske dieses Feld ID nicht angezeigt wird, muss ich dann einfach den Code für die Übertragung mit ergänzen? Oder gibt es dafür ein besseres Handling?
    Durch das Binding musst Du keine IDs eintragen. Es reicht eine Auswahl bei den Comboboxen. Die zeigen doch Software- und Hardwarenamen der aktuellen Info an. Durch die Änderung der Comboboxauswahl ändert sich auch die Info-Software-ID. Ich häng in 10min an diesen Post mal ein Beispielprojekt dran.

    EDIT:
    here we go
    btw: Außer beim Beenden habe ich keinerlei selbstgeschriebenen Code drin. Trotzdem ist alles soweit während der Laufzeit funktionsfähig. Speichern und Laden hab ich rausgelassen. Aber der Rest geht über das Binding, was auch in EdRs VVVs zu sehen ist. Dabei fiel mir auch auf, dass Du in dtInfo auch Hardwarename und Softwarename drin hast. Absichtlich? Denn durch das Binding ist das ja überflüssig. Eigentlich sogar redundant und somit ein potentielles Problem.
    Dateien
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Ah gut dann nehme ich alles außer die Fremd IDs von den anderen dts, aus dtInfo raus.
    Habe mal mein Beispiel dran gehangen. Es gibt bestimmt das ein oder andere was besser geht.

    Meine Frage ist jetzt, verbinde ich die Eingabe Felder mit der dtInfo, wie bekomme ich dann die Daten aus den anderen dts da rein? ?(
    Ich kann ja nur ein Binding gleichzeitig haben...wo bin ich vom Pfad abgekommen?
    Bilder
    • Bild.JPG

      42,08 kB, 431×421, 115 mal angesehen
    Dateien
    • IT-Log.zip

      (632,88 kB, 105 mal heruntergeladen, zuletzt: )
    1. Da fehlen Daten, um mit dem Projekt durchstarten zu können: "\\rs-win1\EDV\_IT-Log\changelog.xml" und "\\rs-win1\Ablage\Marketing Oeffentlich\Logos_NEU\farbig\RS-logo-new-01.jpg"; aber wurscht. Auskommentieren und weiter geht's.
    2. IDs sollten nicht eingegeben werden dürfen, v.a. nicht, wenn sie auf AutoIncrement und Unique eingestellt sind.
    3. Bei Deiner ButtonAdd-Prozedur (und auch den anderen Buttons) kannst Du doch die Zeile _dsIT_Log.WriteXml(strDataSource) überall rausziehen und ans Prozedurende schreiben. Oder überseh ich da was?
    4. Du solltest nicht der BindingSource Einträge hinzufügen, sondern den DataTables.
    5. Du solltest bei Save nicht die DGVs sortieren, sondern die BindingSource.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    zu 1) Dachte das Logo wird dann einfach nicht angezeigt, kommt stattdessen eine Exception? Die DatenQuelle wollte ich noch in einen separaten DataTable ablegen (also den Pfad). Wäre aber erst meine nächste Frage gewesen.
    zu 2) Ja kommen wenn es fertig ist raus, bzw. werden Enabled = False.
    zu 3) Hatte ich auch schon überlegt. Wollte aber generell noch überlegen, ob die Button Struktur verbessert werden kann (Dynamik).
    zu 4 und 5) Danke werden ich ändern.

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

    @VaporiZed

    Hattest du das so gemeint...oder ist das dt<DataTable>.WriteXml zu viel des Guten und es reicht wenn ich das DataSet anspreche, wie vorher?

    VB.NET-Quellcode

    1. With _dsIT_Log
    2. If sender Is BT_ChangelogAdd Then
    3. .dtInfo.Rows.Add()
    4. .dtInfo.WriteXml(strDataSource)
    5. ElseIf sender Is BT_HardwareAdd Then
    6. .dtHardware.Rows.Add()
    7. .dtHardware.WriteXml(strDataSource)
    8. ElseIf sender Is BT_SoftwareAdd Then
    9. .dtSoftware.Rows.Add()
    10. .dtSoftware.WriteXml(strDataSource)
    11. ElseIf sender Is BT_GroupPolicyAdd Then
    12. .dtGroupPolicy.Rows.Add()
    13. .dtGroupPolicy.WriteXml(strDataSource)
    14. ElseIf sender Is BT_SavePathAdd Then
    15. .dtSavePath.Rows.Add()
    16. .dtSavePath.WriteXml(strDataSource)
    17. End If
    18. End With


    Spoiler anzeigen

    VB.NET-Quellcode

    1. With _dsIT_Log
    2. If sender Is BT_ChangelogAdd Then
    3. .dtInfo.Rows.Add()
    4. ElseIf sender Is BT_HardwareAdd Then
    5. .dtHardware.Rows.Add()
    6. ElseIf sender Is BT_SoftwareAdd Then
    7. .dtSoftware.Rows.Add()
    8. ElseIf sender Is BT_GroupPolicyAdd Then
    9. .dtGroupPolicy.Rows.Add()
    10. ElseIf sender Is BT_SavePathAdd Then
    11. .dtSavePath.Rows.Add()
    12. End If
    13. .WriteXml(strDataSource)
    14. End With


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

    AFAICS ist Variante B vollkommen ausreichend. Es kommt natürlich auf die Datenmengen und demzufolge auf die Performance an. Aber ich glaube nicht, dass Du mit > 10000 Datensätzen arbeitest. Einen Punkt solltest Du bedenken: Mit Variante A kann es durchaus passieren, dass Du ne DataTable in die Datei reinschreibst ... und alles andere überschreibst. Ich hab's nicht probiert. Teste es mal aus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.