Archief - [PROG]ASP.NET Error: Object reference not set to an instance of an object.

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Duffman-

Legacy Member
Beste,

ik ben bezig met een project waarbij je boeken (voor school) kan aankopen met een website. Hierbij vul ik een datagrid op met bepaalde boeken en maak ik in de datagrid een column met checkboxen in. Nu wil ik de waarde van de checkbox controleren maar het lukt me niet echt. Ik gebruik de volgende code om de waarde te controleren:

Code:
        Dim chkControle As New CheckBox
        For Each I As DataGridItem In dgrBoekenlijst.Items
            chkControle = CType(I.FindControl("chkControle"), CheckBox)
            If chkControle.Checked Then
                Response.Write("het lukt")
            End If
        Next

Elke keer weer krijg ikde volgende error: Object reference not set to an instance of an object.

Weet iemand wat ik hier verkeerd doe?

Dank bij voorbaat,
Duffman-

Flokky

Legacy Member
De foutmelding die je krijgt betekent zoveel als: je probeert een actie uit te voeren op een object dat nog niet bestaat (nog niet geïnstantieerd is).

Vermoedelijk gaat het mis op je if constructie, waarbij je op het object method 'checked' uitvoert.

Zorg ervoor dat je een controle uitvoert of het desbetreffende object != null.

Je kan een breakpoint zetten in debug mode, dan weet je het 100% zeker of het daar zit.

Obliv`

Legacy Member
Als je FindControl doet, doe je best altijd een check om te zien of je de control wel echt gevonden hebt.

Ik denk dat je beter loopt door de rijen van de gridview, dus: For Each row In grid.Rows

Duffman-

Legacy Member
Obliv` zei:
Als je FindControl doet, doe je best altijd een check om te zien of je de control wel echt gevonden hebt.

Ik denk dat je beter loopt door de rijen van de gridview, dus: For Each row In grid.Rows
Beste,

bedankt voor de reacties. Ik heb de code aangepast als volgt:
Code:
        Dim chkControle As New CheckBox
        For Each I As DataGridItem In dgrBoekenlijst.Items
            chkControle = CType(I.FindControl("chkControle"), CheckBox)
            If chkControle Is Nothing Then
            Else
                If chkControle.Checked Then
                    Response.Write("het lukt")
                End If
            End If
        Next
Maar nu heb ik een nieuw probleem. Als ik nu op de knop volgende druk (de code die ik heb gepaste wordt getriggerd door het klikken op die knop) dan krijg ik gewoon opnieuw de pagina te zien maar dan is de kolom met de checkboxen in opeens weg en wordt er nergens "het lukt" weggeschreven. Ik zit echt met het haar in de handen. Ik zit al een maand vast op dit gedeelte van het programma en ik geraak echt niet verder.

Grtz,
Duffman-

Obliv`

Legacy Member
Heb je al met de grid.Rows gewerkt ipv grid.Items? Probeer misschien ook wat met de debugger te spelen als je code niet goed werkt.

Duffman-

Legacy Member
Obliv` zei:
Heb je al met de grid.Rows gewerkt ipv grid.Items? Probeer misschien ook wat met de debugger te spelen als je code niet goed werkt.
Hey,

tis een asp.net project en om de één of andere lugubere reden kan ik dan niet debuggen. Ik heb nog niet met grid.rows gewerkt nee maar ik snap niet goed hoe ik dat moet aanpakken en wat je net bedoelt ... en trouwens, dgrBoekenlijst.Rows is geen property ofzo ... dat bestaat niet volgens mijne visual studio (syntax error)

Grtz,
Duffman-

Obliv`

Legacy Member
Net hezelfde als hoe je nu werkt

Code:
        Dim chkControle As New CheckBox

        For Each row As DataGridRow In dgrBoekenlijst.Rows
            chkControle = CType(row.FindControl("chkControle"), CheckBox)

            If chkControle IsNot Nothing AndAlso chkControle.Checked Then
                Response.Write("het lukt")
            End If
        Next

Dat je niet kan debuggen heeft niets te maken met dat het geen ASP.NET project is. Wat de oorzaak daarvan is weet ik niet.

Obliv`

Legacy Member
Dat je nu niets meer krijgt, komt waarschijnlijk omdat je Then-tak leeg is in je If-clause.

Duffman-

Legacy Member
Obliv` zei:
Net hezelfde als hoe je nu werkt

Code:
        Dim chkControle As New CheckBox

        For Each row As DataGridRow In dgrBoekenlijst.Rows
            chkControle = CType(row.FindControl("chkControle"), CheckBox)

            If chkControle IsNot Nothing AndAlso chkControle.Checked Then
                Response.Write("het lukt")
            End If
        Next

Dat je niet kan debuggen heeft niets te maken met dat het geen ASP.NET project is. Wat de oorzaak daarvan is weet ik niet.

Mijn visual studio geeft de volgende delen als fout aan:
Datagridrow, dgrBoekenlijst.rows.
dat wordt onderlijnd.
Datagridrow krijgt de fout: Datagridrow is not defined
dgrBoeknlijst.rows krijgt de fout: 'Rows' is not a member of system.Web.UI.Webcontrols.datagrid

Grtz,
Duffman-

PS: mijn ASP debugged niet maar als ik wil debuggen in gewoon windows form dan lukt het wel ...

coppermine

Legacy Member
probeer eens
Code:
For Each row As DataRow In dgrBoekenlijst.Tables(0).Rows

Over dat debuggen moet je eens in je web.config file kijken. De juiste setting zou moeten zijn

Code:
<compilation debug="true" strict="false" explicit="true" />

mvg,
Copper

Duffman-

Legacy Member
coppermine zei:
probeer eens
Code:
For Each row As DataRow In dgrBoekenlijst.Tables(0).Rows

Over dat debuggen moet je eens in je web.config file kijken. De juiste setting zou moeten zijn

Code:
<compilation debug="true" strict="false" explicit="true" />

mvg,
Copper
Bedankt voor de reacties allemaal, het werkt ondertussen. Ik zal morgenavond deze post aanpassen om het probleem uit te leggen maar nu ga ik slapen. Bedankt voor alle hulp!!

Grtz,
Duffman-
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan