TextboxColumn in DGV, BindingSource per Designer?

  • VB.NET

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

    Table "Supplier" - werden die Supplier(Namen) eingegeben.
    Table "Hardware" - wird jeder eingegebenen Hardware, ein Supplier(Namen) über die "SupplierID" Combobox zugewiesen.
    Table "Workplace" - wird jedem eingegebenen Workplace, eine Hardware über die "HardwareID" Combobox zugewiesen.

    Die Spalten "SupplierName" in Hardware und Workplace sind einfach zwei Hilfsspalten wo ich den Namen aus Supplier durchreiche.

    Wirre erklärung^^ Testprojekt ist angehängt.

    LG Maffi

    Edit: ein Button "Aktualisieren" ist auf der Form, der aber keinen Code enthält, da die Änderungen in den Datagridviews natürlich erst beim verlassen der aktuellen Zeile stattfinden.

    TestWorkplace.rar
    @Maffi
    Jetzt habe ich gedachte ich könnte über die Expression auch einfach die ID durchreichen und dann DirectCasten...aber die Expression ist automatisch Read-Only. :)

    Edit:
    @VaporiZed
    Kann ich den DirectCast auch bei einer System.NullReferenceException abfangen? Weil wenn noch keine ID eingetragen ist kann auch nichts gecastet werden. :rolleyes:

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

    NullReferenceException? Für welchen Parameter? Bei Zeilenerstellung muss man ja immer auch ne ParentRow angeben:

    VB.NET-Quellcode

    1. Tds.Supplier.AddSupplierRow("Doll")
    2. Tds.Supplier.AddSupplierRow("Alternative")
    3. Tds.Supplier.AddSupplierRow("Predator")
    4. Tds.Hardware.AddHardwareRow("Desktop-PC", Tds.Supplier.First)
    5. Tds.Hardware.AddHardwareRow("Tower", Tds.Supplier.Last)
    6. Tds.User.AddUserRow("Müller", Tds.Hardware.First)
    7. Tds.User.AddUserRow("Meier", Tds.Hardware.Last)

    Oder arbeitest Du da mit Nothing an irgendeiner Stelle? Oder bringst Du die Daten anderweitig ist tDS? Klar, man kann jedes fälschlich Nothing abfangen. Nur eben: an welcher Stelle erwartest Du eines?
    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.

    VB.NET-Quellcode

    1. Dim SoftwareSupplierID = DirectCast(DirectCast(WorkplaceBindingSource.Current, DataRowView).Row, Inventar.WorkplaceRow).SoftwareRow.SupplierID


    Hier soll ja eine SupplierID in den Namen gecastet werden aber wenn keine ID eingetragen wurde kann ja auch nichts gecastet werden, oder sehe ich das falsch?
    Die Exception will ich abfangen.

    EDIT:
    Mal etwas am Rande. Ich will nun im Workplace Table die Hardware nicht mehr anzeigen und diese in ein separates DGV verfrachten (da ja mehr als eine Hardware pro Workplace vorhanden sein kann).
    Welche Beziehungsrelation verwende ich? Ich habe jetzt die FK_HardwareWorkplace an das separate DGV gebunden dann reagiert aber die HardwareBindingSource und ich will ja nicht einer Hardware mehr Hardware hinzufügen. Und verwende ich die WorkplaceBindingSource, wird jedesmal eine neuer Workplace erzeugt...wo ist mein Gedankenfehler?

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

    Du ignorierst dabei die Datenerstellungsreihenfolge. Ein Workplace kann, wenn man die Daten manuell per Code erzeugt, nur erzeugt werden, wenn man eine HardwareRow als Argument übergibt (Post#23, Zeile6/7). Und eine HardwareRow kann man so nur erzeugen, wenn man eine SupplierRow hat (Z#4/5). Daher muss eine SupplierRow mit ihrer ID existieren. Daher die Frage, wie Deine Daten ins tDS kommen. Aber selbst wenn SupplierID Nothing ist, erhältst Du ja keine NullReferenceException (NREx), da die ID in der von Dir genannten Zeile nicht weiter verwendet wird, außer zur Zuordnung zu einer Variablen. Gecastet wird mit einer WorkplaceRow. Die könnte ggf. Nothing sein und zum Problem werden. Auch die SoftwareRow könnte theoretisch Nothing sein. Das würde ich dann - sobald ich einen Beweis habe, dass eine NREx auftritt, weil definitiv beide Parameter situationsabhängig Nothing sein können, so angehen:

    VB.NET-Quellcode

    1. Dim CurrentWorkplace As Inventar.WorkplaceRow = Nothing
    2. Dim SoftwareRow As Inventar.SoftwareRow = Nothing
    3. Dim SoftwareSupplierID = 0
    4. If WorkplaceBindingSource.Current IsNot Nothing Then CurrentWorkplace = DirectCast(DirectCast(WorkplaceBindingSource.Current, DataRowView).Row, Inventar.WorkplaceRow)
    5. If CurrentWorkplace IsNot Nothing Then SoftwareRow = CurrentWorkplace.SoftwareRow
    6. If SoftwareRow IsNot Nothing Then SoftwareSupplierID = SoftwareRow.SupplierID
    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.