DirectCast mit Bindingsource

  • VB.NET

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

    DirectCast mit Bindingsource

    Hallo Leute... ;)

    Ich habe mir ein kleines Testprojekt gebastelt. Darauf habe ich vier Textboxen.
    In der Textbox txtUsername schreibe ich den Benutzer und in txtPassword das aktuelle Passwort. Die Richtigkeit prüfe ich mit einem Button so:
    Der Code ...

    VB.NET-Quellcode

    1. Dim userName As String = Me.txtUsername.Text
    2. Dim password As String = Me.txtPwd.Text
    3. Dim result = From p In Me.DataSet.users Where p.Username = userName Select p
    4. If result.Count = 1 Then
    5. Dim givenPwd As String = Hash(userName, password)
    6. If givenPwd = result(0).Password Then
    7. MessageBox.Show("Super, Daten stimmen!")
    8. End If
    9. End If


    Nun habe ich 2 weitere Textboxen. Mittels diesen kann man das Passwort zum Username (txtUsername) ändern. Das ganze habe ich mit dem Code probiert:

    VB.NET-Quellcode

    1. Dim userName As String = DirectCast(DirectCast(UsersBindingSource.Current, DataRowView).Row, DataSet.usersRow).Username
    2. Dim result = From p In Me.DataSet.users Where p.Username = userName Select p
    3. Dim password As String = Me.tbpwd2.Text
    4. If result.Count = 1 Then
    5. If tbpwd2.TextLength >= 5 Then
    6. result(0).Password = Hash(userName, password)
    7. End If


    Das lustige dabei ist, dass einfach nicht zum dem ausgewählten Benutzer (txtUsername) das Passwort geändert wird, sondern irgendein mir unbekannter Datensatz. :S

    Wer kann mir helfen?

    EDIT: Es wird immer das Passwort eine Zeile darunter (im Datagrid) geändert. ?(

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

    du liebst es aber kompliziert, was? ;)
    also warum die Linq-Query iwas falsches abliefert-k.A., aber wenn du den User aus der BindingSource holst, dann brauchst du ihn doch nicht nochmal im Dataset rauszusuchen:

    VB.NET-Quellcode

    1. Imports myNamespace.DataSet
    2. '...
    3. Dim rwUser = DirectCast(DirectCast(UsersBindingSource.Current, DataRowView).Row, usersRow)
    4. rwUser.Password = Hash(tbpwd2.Text)
    Ich weiss allerdings auch nicht, was deine Hash-Funktion macht, v.a., warum die 2 Argumente erwartet
    Haha :D Ja, warum einfach wenn es auch schwer geht. ;)

    Der Hash erwartet 2 Argumente, weil ich diesen aus Benutzer + Passwort bilde. Die dahinterstehende Sicherheit ist Ansichtssache... ;)


    Also das DataGrid liegt nicht auf derselben Form. Habe es jetzt mal so geschrieben:

    VB.NET-Quellcode

    1. If Not tbpwd1.Text = "" AndAlso Not tbpwd2.Text = "" Then
    2. If tbpwd1.Text = tbpwd2.Text Then
    3. Dim rwUser = DirectCast(DirectCast(UsersBindingSource.Current, DataRowView).Row, usersRow)
    4. Dim userName As String = Me.txtUsername.Text
    5. Dim password As String = Me.tbpwd2.Text
    6. rwUser.Password = Hash(userName, password)
    7. Else
    8. MsgBox("Bitte füllen Sie alle Felder aus!", MsgBoxStyle.Exclamation, "Fehler")
    9. End If
    10. End If


    Es tritt derselbe Fehler auf. Nur komisch, dass jetzt zu keinem User mehr das ursprüngliche Passwort funktioniert.... ;(
    was soll das?

    VB.NET-Quellcode

    1. Dim userName As String = Me.txtUsername.Text

    du hast doch den user, also nimm ihn auch

    VB.NET-Quellcode

    1. rwUser.Password = Hash(rwUser.Name, tbpwd2.Text)


    Der Hash erwartet 2 Argumente, weil ich diesen aus Benutzer + Passwort bilde.
    Und wenn der User seinen Benutzernamen ändern möchte, dann geht sein PW nichmeh?

    Ansichtssache?
    och - naja - könnte man lösen.

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

    Sorry, hab' mich etwas schwer getan es zu verstehen. ;)
    Natürlich klappt es jetzt.

    Danke für Deine Hilfe. :)
    Dateien
    • TestProjekt.zip

      (267,37 kB, 139 mal heruntergeladen, zuletzt: )

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

    ErfinderDesRades schrieb:

    Und wenn der User seinen Benutzernamen ändern möchte

    Das habe ich grundlegenst ausgeschlossen. Das lässt ich aber mit ein bissl coden auch einbringen. :)

    Irgendwie klappt es doch nicht. Es wird komischer Weise immer der Datensatz verändert, der im Grid auch selektiert ist. Das soll aber nicht so sein. Es soll nur der Datensatz geändert werden, dessen Username eingegeben wurde. ?( Oben mal die ZIP
    Ja klar ist der aktuell selektierte Datensatz in der Source. Nur möchte ich anhand der Eingabe des Usernamens dessen Passwort ändern. Also muss ich das zu friemeln, dass der entsprechende Datensatz dann selektiert ist? :S
    naja, ungefähr das was du schon hattest. Also wenn du die BindingSource garnicht brauchst, dann brauche sie auch nicht

    VB.NET-Quellcode

    1. dim userName=txtUsername.Text
    2. dim rwUser=Me.DataSet.users.FirstOrDefault(function(usr)usr.UserName=userName)
    3. if rwUser is Nothing then
    4. Messagebox.show(String.Concat("Den User '", userName, "' gibts nich!")
    5. else
    6. rwUser.Password=Hash(userName, txtPwd.Text)
    7. endif