ASP.NET datagrid overlopen

Plaats reactie
laris
Plus Member
Plus Member
Berichten: 109
Lid geworden op: 07 jul 2005, 17:10
Locatie: Hove

Hier ben ik weer met een asp.net vraag :)

Ik ben bezig aan een pagina voor de admin om bezoekers (die zowieso eerst moeten registreren) rechten tegeven

Wanneer je op een gebruiker zijn naam klikt kom je in een datagrid terecht met 3 rijen. In elke rij staat eerst een checkbox en daarnaast een toegangsrecht. (Dit wordt uit de database opgehaald).
Wanneer de datagrid opvult komt de checkbox voor de toegangsrechten die de gebruiker heeft correct te staan.
De checkbox zit in een 'temlate column' van de datagrid

Dit gebeurt door volgende code

Code: Selecteer alles

Dim row As DataGridItem
        For Each row In dgrGroepen.Items
            Dim chkSelected As CheckBox = row.Cells(0).FindControl("chkSelectedItem")
            Dim iAantal As Integer = clsBeveiligingsGebruikerDA.GetAantalGroepByLogin(Login, row.Cells(1).Text)

            If iAantal > 0 Then
                chkSelected.Checked = True
            Else
                chkSelected.Checked = False
            End If
        Next


(misschien kan dit reeds properder geprogrammeerd worden, suggesties welkom :))


Nu zou je de checkboxen kunnen aan/uitvinken en op de knop opslaan onder de datagrid klikken om de toegangsrechten van een gebruiker te wijzigen.
Ik heb volgende code daarvoor, maar er schort iets mee, hij verwijdert nu meestal alle rechten van de gebruiker.

Code: Selecteer alles

Private Sub btnOpslaan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpslaan.Click

        Dim row As DataGridItem

        For Each row In dgrGroepen.Items

            Dim chkSelected As CheckBox = row.Cells(0).FindControl("chkSelectedItem")
            Dim iAantal As Integer = clsBeveiligingsGebruikerDA.GetAantalGroepByLogin(Login, row.Cells(1).Text)

            If iAantal <= 0 And chkSelected.Checked Then
                Dim oBeveiligingsGroep As New clsBeveiligingsGroep
                oBeveiligingsGroep.Login = Login
                oBeveiligingsGroep.Groep = row.Cells(1).Text
                clsBeveiligingsGroepDA.VoegGroepToeAanGebruiker(oBeveiligingsGroep)
            Else
                Dim oBeveiligingsGroep As New clsBeveiligingsGroep
                oBeveiligingsGroep.Login = Login
                oBeveiligingsGroep.Groep = row.Cells(1).Text
                clsBeveiligingsGroepDA.VerwijderGroepVanGebruiker(oBeveiligingsGroep)
            End If
        Next
    End Sub


Mm klinkt als een lastige vraag, alle hulp welkom

Alvast bedankt!
cptKangaroo
Elite Poster
Elite Poster
Berichten: 2759
Lid geworden op: 18 dec 2004, 14:33
Locatie: 053 Aalst
Uitgedeelde bedankjes: 551 keer
Bedankt: 194 keer

(1) terzijde: ik zou 'dim's buiten de 'for' loops zetten :-)

Als iAantal >=0, dan is selected = true, maar in uw code:
"iAantal <=0 And chkSelected.Checked = true"

Trouwens, het feit dat je zowel naar iAantal als naar chkSelected.Checked kijkt, is eventueel een mogelijke bron tot fout omdat wat je checkt eigenlijk slechts aan één van die twee voorwaarden hoeft te voldoen om juist te zijn -- 't is waarschijnlijk niet fout, maar ik zou enkel chkSelected.Checked als voorwaarde opgeven zodat het duidelijker is mocht het fout lopen.

EDIT :: die iAantal is blijkbaar eerder het aantal groepen dat wordt toegevoegd (ik dacht dat het om het aantal groepen die wijzigen ging) -- soit, hier is mijn interpretatie :-)

Code: Selecteer alles

Dim row As DataGridViewRow, chkSelected As CheckBox, iAantal As Integer

        For Each row In dgrGroepen.Rows
           chkSelected = row.Cells(0).FindControl("chkSelectedItem")
           iAantal = clsBeveiligingsGebruikerDA.GetAantalGroepByLogin(Login, row.Cells(1).Text)

            If iAantal > 0 Then
                chkSelected.Checked = True
            Else
                chkSelected.Checked = False
            End If
        Next



Private Sub btnOpslaan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpslaan.Click

        Dim row As DataGridViewRow, chkSelected As CheckBox, iAantal As Integer

        For Each row In dgrGroepen.Rows
            chkSelected = row.Cells(0).FindControl("chkSelectedItem")
            iAantal = clsBeveiligingsGebruikerDA.GetAantalGroepByLogin(Login, row.Cells(1).Text)

            If iAantal >=0 And chkSelected.Checked = True Then
                Dim oBeveiligingsGroep As New clsBeveiligingsGroep
                oBeveiligingsGroep.Login = Login
                oBeveiligingsGroep.Groep = row.Cells(1).Text
                clsBeveiligingsGroepDA.VoegGroepToeAanGebruiker(oBeveiligingsGroep)
            Else
                Dim oBeveiligingsGroep As New clsBeveiligingsGroep
                oBeveiligingsGroep.Login = Login
                oBeveiligingsGroep.Groep = row.Cells(1).Text
                clsBeveiligingsGroepDA.VerwijderGroepVanGebruiker(oBeveiligingsGroep)
            End If
        Next

    End Sub


Eventueel uw dims voorzien van een startwaarde, bijvoorbeeld:
Dim row As DataGridViewRow = Nothing, chkSelected As CheckBox = Nothing, iAantal As Integer = 0
laris
Plus Member
Plus Member
Berichten: 109
Lid geworden op: 07 jul 2005, 17:10
Locatie: Hove

Ik heb het gevonden, het had te maken met dat ik de datagrid telkens opvulde als de pagina laadde, met gevolg dat hij telkens dan pas keek of de checkboxen true stonden

nu werk ik bij pageLoad met
if not me.ispostback then
fillDatagrid()
end if


Bedankt om er naar te kijken cptKangaroo
Gebruikersavatar
The_Borg
Elite Poster
Elite Poster
Berichten: 1759
Lid geworden op: 22 dec 2003, 20:25

Hier ben ik weer met een asp.net vraag


MCT is fun isn't it :p.
"We are the Borg. Lower your shields and surrender your ships. We will add your biological and technological distinctiveness to our own. Your culture will adapt to service us. Resistance is futile."
laris
Plus Member
Plus Member
Berichten: 109
Lid geworden op: 07 jul 2005, 17:10
Locatie: Hove

héhé it is :lol:

hoe ver staat ge al mee webtech? (moest ge in 2de zitten)
Plaats reactie

Terug naar “Development”