AllowUsertoAddRows=false bei datengebundenes Datagridview

  • VB.NET

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

    AllowUsertoAddRows=false bei datengebundenes Datagridview

    Hallo zusammen,

    ich habe zwei Datagridviews, die an zwei Tabellen einer DB gebunden sind. Das erste DGV ist an die Haupttabelle gebunden. Das zweite DGV zeigt die über den Fremdschlüssel verknüpfte Datensätze des DGV eins an. Es gibt in Tabelle 2 nur einen Datensätz für den aus der Haupttabelle. Wenn ich aber den Datensatz im DGV ändere wird automatisch ein zweite Zeile im DGV erstellt. Klar, kann ich über AllowUsertoAddRows=false machen. Dann ist aber das Problem, wenn ich in DGV eins ein Datensatz auswähle wird der verknüpfte Datensatz in DGV zwei nicht angezeigt.

    Kann mir jemand sagen wie ich den verknüpften Datensatz dennoch angezeigt bekomme?

    Danke!
    Gruß von der KSE

    ks-entwicklung.de
    Also ich habe es jetzt selbst hin bekommen soweit.

    Nun bekomme ich aber noch folgenden Fehler, wenn ich meinen Code benutze. Kann ihn über Try abfangen, aber das ist ja nicht Sinn der Sache!

    Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub TbBenutzerverwaltung_UsersDataGridView_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TbBenutzerverwaltung_UsersDataGridView.SelectionChanged
    2. Try
    3. If TbBenutzerverwaltung_RechteDataGridView.Rows.Count < 1 Then
    4. TbBenutzerverwaltung_RechteBindingSource.AddNew()
    5. End If
    6. Catch ex As Exception
    7. End Try
    8. End Sub



    Fehlermeldung:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Das Element kann nicht zu einer schreibgeschützten Liste oder einer Liste mit fester Größe hinzufügt werden."



    Der Fehler kommt aber nur, wenn ich die Form starte.

    Kann mir hierzu jemand sagen an was das liegt?
    Gruß von der KSE

    ks-entwicklung.de
    Ja genau, es ist eine ParentChild-View. Wenn ich in der Parent-View einen neuen Datensatz eintrage, wird in der Child-View einen Datensatz erstellt. Passt auch alles soweit (AllowUsertoAddRows=true in diesem Fall). Trage ich Werte in der Child-View ein wird dannach automatisch ein weiterer Datensatz erzeugt zum weiter Daten eintragen. Der Benutzer soll aber nur einen Datensatz für jeden Parent-View Datensatz eintragen können. Dann habe ich mir gedacht, dass ich einfach AllowUsertoAddRows=false mache. Jetzt wird aber nicht mehr automatisch der Child-Datensatz für den Parenteintrag erzeugt. Daraufhin habe ich den Code von Post 3 geschrieben, damit die row eben per Code erzeugt wird. Funktioniert auch soweit, nur beim starten der Form wird die Fehlermeldung ausgelöst die ich momentan über Try Catch abfange.

    Ist es jetzt für dich verständlicher?
    Gruß von der KSE

    ks-entwicklung.de
    In deinem Beispielprojekt verhält es sich genauso wie bei mir.

    Siehe Bild und dein geändertes Projekt.

    Änderungen:

    Datagridview2: AllowUsertoAddRows=false
    Bilder
    • Unbenannt.png

      14,67 kB, 619×211, 181 mal angesehen
    Dateien
    • AddOnDB.zip

      (159,59 kB, 136 mal heruntergeladen, zuletzt: )
    Gruß von der KSE

    ks-entwicklung.de
    Möglicherweise hast du mit zweiterem recht.

    Es ist eine Benutzerverwaltung mit Berechtigungsstufen.

    Für jeden Benutzer der angelegt wird gibt es drei Berechtigungsstufen zur Auswahl für mehrere Programme.

    - Admin

    - Benutzer

    -Gast

    z.B. Benutzer 1 : Programm1: Admin ; Programm2:Benutzer; Programm3:Gast

    In dem Parent-Datagridview wird der Benutzer mit der WindowsAutehntifizierung und mit seinem Namen angelegt.

    In dem Child-Datagridview werden über Comboboxen die entsprechenden Berechtigungen vergeben.

    Tabellen:

    1. Angelegte User

    2. Rechte in den verschiedenen Programmen

    3. Rechtestufen
    Gruß von der KSE

    ks-entwicklung.de
    und was ist mit den Datarelationen in deim Datenmodell??

    Also ich könnte mir für eine Rechte-Verwaltung folgendes Modell vorstellen:

    Tabellen User, Permission, Program, UsePermission

    Relationen:

    User->UsePermission
    Program->UsePermission
    Permission->UsePermission

    Also ein UsePermission-Datensatz verknüpft über ForeignKeys einen User mit einem Programm mit einer Permission

    Das könnte aussagen, dass Benutzer1 in Programm3 die Permission "Gast" hat.

    eine erweiterte m:n - Relation, also genau genommen eine m:n:o - Relation.

    Weiters denke ich, hier wären zusammengesetzte Primkeys angezeigt, damit nicht ein User fürs selbe Programm mehrere Permissions kriegen kann. zusammengesetzter Primkey
    Ja, genau so habe ich es auch gemacht! Nur eben nicht, dass die UserID in der Premisson-Tabelle eindeutig sein muss. Aber dann könnte der Benutzer doch einen zweiten Datensatz eingeben und es würde ein Fehler ausgelöst werden, richtig?
    Gruß von der KSE

    ks-entwicklung.de