Fehler beim Aufruf von EditNew(of Form) aus den Helpers

  • VB.NET

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

    Fehler beim Aufruf von EditNew(of Form) aus den Helpers

    Hallo ihr lieben.
    In vielen meiner Projekte nutze ich die Helpers vom @ErfinderDesRades , bisher immer problemlos.
    Nun habe ich aber ein Problem mit dem Aufruf BSPasswort.EditNew(Of dlgPasswortBearbeiten).
    Es kommt zum Programmabsturz mit dem Fehler:
    System.ArgumentException: "An die Eigenschaft oder Spalte URL für die DataSource kann nicht gebunden werden.
    Parametername: dataMember"

    Wenn ich auf der entsprechenden Form das DataBinding an diese Column entferne, erscheint der Fehler für eine andere DataColumn an die nicht gebunden werden kann.
    Wenn keine DataBindings mehr bestehen läufst, macht ja aber auch leider keinen Sinn mehr.

    Da ich vermute, dass der Fehler hier eher an mir (irgendwas banales) liegt, lade ich mal die gesamte Solution hoch und bastel keine Demoanwendung (dann wäre der Fehler ziemlich sicher weg)
    Den Aufruf findet ihr im UserControl UCAdressen.
    Um den Fehler im Programm zu reproduzieren nach dem Starten oben auf das Vorhängeschloss klicken und auf den Button PWNeu.

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

    Na, da haste aber schlecht getestet. Die Helpers sind auf Framework 4.8, Dein Projekt auf 4.7.2. Das kompiliert nicht. Auch ist als Startform Form1 festgelegt, was es nicht gibt. Aber das sind Kleinigkeiten.
    Interessanterweise steckt im UCPasswort in BSMain kein tDS drin, sondern ein ListTypeDescriptor oder sowas. Daher kann wohl die BSPasswort nicht auf eine PasswortRow zugreifen und es kommt zum Crash. In einer DemoApp kann ich das noch nicht nachstellen, da wird ganz normal das tDS von einem Form zum nächsten weitergegeben. Mal sehen, ob ich den Fehler finde …
    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.
    Hmm. Ich habe meine Projektmappe auf dem Desktop kopiert, die Helpers sources reinkopiert und den Verweis gesetzt.
    Dann hat VS gemeckert, dass ich das Framework auf 4.8 rausschrauben soll (habe nicht genau gelesen) nur OK gedrückt.
    Dann habe ich auf Play gedrückt und das Ding hat sauber kompiliert...
    Den Fehler mit Form 1 habe ich vergessen im anderen Thread zu erwähnen. (Ich bekomme die da nämlich nicht weg)
    Da es hier aber ausnahmsweise Mal nur um eine Sache geht (was bei mir ja eher selten vorkommt), nerve ich dich damit die Tage in dem anderen Thread.
    Habe einen Weg gefunden, greife aber damit in Fremdmaterial ein: Durch die Tatsache, dass die BSPasswort auf dem DlgPasswortBearbeiten noch der DataMemberWert Passwort gesetzt ist, wird es wohl zu Schwierigkeiten beim Binden kommen. So klappt es erstmal bei mir:

    VB.NET-Quellcode

    1. Private Function EditItem(Of T As {Form, New})(bs As BindingSource, item As Object, onErrorRetry As Boolean, owner As Form) As DialogResult
    2. EditItem = DialogResult.Retry
    3. Dim tb = DirectCast(item, DataRowView).Row.Table
    4. While EditItem = DialogResult.Retry
    5. Using frm = New T
    6. tb.DataSet.Register(frm, False)
    7. Dim allCtls = New GetChilds(Of Control)(Function(ctl) ctl.Controls).AllAsList(frm)
    8. Dim bindFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public _
    9. Or BindingFlags.NonPublic Or BindingFlags.GetField
    10. For Each ctl In allCtls.Where(Function(c) TypeOf c Is ContainerControl AndAlso TypeOf c Is Form OrElse TypeOf c Is UserControl)
    11. For Each fld In ctl.GetType.GetFields(bindFlags).Where(Function(f) f.FieldType Is GetType(BindingSource))
    12. Dim bs2 = DirectCast(fld.GetValue(ctl), BindingSource)
    13. If bs2 Is Nothing Then Continue For
    14. If tb Is bs2.DataTable Then
    15. bs2.DataSource = item
    16. bs2.DataMember = "" '<-- neu
    17. Try
    18. EditItem = frm.ShowDialog(owner)
    19. […]

    Dann die Helpers neu kompilieren und Projektmappe starten.

    Allerdings werd ich zu später Stunde deshalb nicht schlau draus, weil ja ne BindingSource in Kombination mit tDS immer n DataMemberWert hat 8|
    Wenn das der Fehler wär, wär der ja schon vor Jahren aufgefallen …
    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.
    Ursache gefunden: Die Helpers kommen insofern mit Deiner Tabelle nicht klar, weil die Tabelle Passwort heißt, eine Eigenschaft davon aber auch Passwort. Benennst Du eines davon um und beseitigst eventuell daraus resultierende Datenfehler in der XML, klappt es.
    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.
    Du bist ein Engel!
    Ich habe nun die DataTable in LoginDaten umbenannt. Außerdem natürlich auch alles andere, was vorher Passwort hieß (UCLoginDaten, dlgLoginDatenBearbeiten, BSLoginDaten, BTNLoginDatenNeu, usw.) Ist ja eh irgendwie ein besserer Name.
    Es läuft wies soll.