[asp.net] Probleem met repeater

Pagina: 1
Acties:

  • Folkert
  • Registratie: September 2001
  • Laatst online: 21:33
Ik heb op mijn pagina een repeater staan. Hieraan een onItemdatabound event gekoppeld. Afhankelijk van de waarde van een querystring zal een item(hyperlink) in de repeater een andere stylesheet krijgen.

Code repeater:
ASP.NET:
1
2
3
4
5
6
7
8
9
10
<asp:Repeater id="rptEvents" runat="server">
<ItemTemplate>
<li>
<asp:HyperLink NavigateUrl='<%# "../indexEvents.aspx?eventID=" &
 Databinder.eval(Container, "DataItem.eventID")%>' Runat="server"
 ID="linkEvents" text='<%# "<b>" & Databinder.eval
(Container, "DataItem.eventDate")& "</b></br>" & Databinder.eval
(Container, "DataItem.eventPlaats")%>'/></li>
</ItemTemplate>
</asp:Repeater>


Code itemdatabound:
ASP.NET:
1
2
3
4
5
6
7
8
9
10
Private Sub rptEvents_ItemDataBound(ByVal sender As Object, 
ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) 
Handles rptEvents.ItemDataBound
        If Not Request.QueryString("eventID") Is Nothing Then
            If e.Item.DataItem("eventID") = Request.QueryString("eventID") Then
                Dim linkEvent As HyperLink = e.Item.FindControl("linkEvents")
                linkEvent.CssClass = "navigatieTopSelected"
            End If
        End If
    End Sub


Probleem is een constant terugkerende melding:
"Object variable or With block variable not set."

Ik heb al van alles gezocht maar kan geen oplossing vinden. Ik begrijp dat het VB.NET specifiek is
(zie: http://support.microsoft....aspx?scid=kb;EN-US;316478)

Ik weet niet hoe ik dit moet oplossen, nog wat de melding nou specifiek inhoudt...

Waar ik helemaal gek van wordt is dat het op een andere pagina wel werkt terwijl ik daar op exact dezelfde manier werk... |:(

[ Voor 15% gewijzigd door Folkert op 01-07-2004 22:49 ]


  • Folkert
  • Registratie: September 2001
  • Laatst online: 21:33
Wat ik ook probeer, ik weet niet waar de oplossing ligt...HELP!!!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Gaat het hier over een compiler error, of een runtime error?
Indien het een runtime error is:
Heb je al eens een breakpoint in je code gezet, en nagegaan waar (op welke lijn) die fout juist gegeven wordt.
Mijn eerste idee zou zijn dat het op lijn 7 gegenereerd wordt, en dat lijn 6 de oorzaak is: er is misschien geen control met de naam 'linkEvents' op die pagina en FindControls returned null.

https://fgheysels.github.io/


  • Folkert
  • Registratie: September 2001
  • Laatst online: 21:33
Het is geen compiler error, dat gaat prima, de control is wel aanwezig maar het lijkt wel of deze bij de itemDatabound nog niet 'aanwezig' is en pas in een later stadium wordt geplaatst.

Ik ga even de breakpoints plaatsen...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Folkert schreef op 01 juli 2004 @ 23:34:
Het is geen compiler error, dat gaat prima, de control is wel aanwezig maar het lijkt wel of deze bij de itemDatabound nog niet 'aanwezig' is en pas in een later stadium wordt geplaatst.

Ik ga even de breakpoints plaatsen...
Is die control een onderdeel van je DataGridItem, of is staat ie gewoon ergens op je pagina en niet in je datagrid ?
De fout kan ook evengoed op regel 5 veroorzaakt worden.

[ Voor 8% gewijzigd door whoami op 01-07-2004 23:39 ]

https://fgheysels.github.io/


  • Folkert
  • Registratie: September 2001
  • Laatst online: 21:33
De control stat gewoon in de repeater. Het is een standaard repeater met daarin een asp:hyperlink. Ik wil dat deze gewoon 'de selectie' krijgt op een bepaalde pagina afhakelijk van de querystring. Ik gebruik deze techniek regelmatig maar op de een of andere manier krijg ik het nu niet meer actief (in dit geval).

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Folkert schreef op 01 juli 2004 @ 23:34:
Het is geen compiler error, dat gaat prima, de control is wel aanwezig maar het lijkt wel of deze bij de itemDatabound nog niet 'aanwezig' is en pas in een later stadium wordt geplaatst.

Ik ga even de breakpoints plaatsen...
* gorgi_19 betwijfeld sterk of die control op die plaats aanwezig is... Immers, het eerste item is je een ListItemType.Header; en die heeft die control waarschijnlijk niet.

Hint: Controleer e.Item.ItemType op AlternatingItem en Item

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Folkert
  • Registratie: September 2001
  • Laatst online: 21:33
Ok, zal die controle even doen.

Error:
Exception Details: System.NullReferenceException: Object variable or With block variable not set.

Fout wordt veroorzaakt bij:
If e.Item.DataItem("eventID") = Request.QueryString("eventID") Then

De controls zijn echt aanwezig!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

En DataItem moet je casten naar het originele item, wat stop je in je datasource?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Zoals gorgi al zegt, is het eerste item je header.
Die is niet gebinded aan een datasource, je zult die controle er dus wele cht moeten inzettne

Ik denk dat er een gewone dataset/datatable aan gebinded wordt (althans, daar ga ik vanuit), en dan moet je DataItem gewoon naar een DataRow casten.

[ Voor 35% gewijzigd door whoami op 01-07-2004 23:49 ]

https://fgheysels.github.io/


  • Folkert
  • Registratie: September 2001
  • Laatst online: 21:33
Ik post de code wel even want ik kom er echt niet uit, wat ik ook probeer

Code usercontrol
ASP.NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ Control Language="vb" AutoEventWireup="false" 
Codebehind="H2.ascx.vb" Inherits="WebAppDemo.H2"
 TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>

<asp:Repeater id="rptMainNav" runat="server">

<ItemTemplate>
<asp:HyperLink id="linkMainNav" 
text='<%#databinder.eval(Container, "dataItem.mainName")%>' 
Runat="server" 
NavigateUrl='<%# "../../default.aspx?mainID=" &amp; DataBinder.eval(container,"dataItem.mainID")%>' 
CssClass="mainNav">
</asp:HyperLink>
</ItemTemplate>

<SeparatorTemplate>
&nbsp;
</SeparatorTemplate>
</asp:Repeater>


codebehind:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        bindData()
    End Sub

    Private Sub bindData()
        Dim objData As DataAccessLayer = New DataAccessLayer
        Dim dr As OleDbDataReader = objData.getMainNav
        Me.rptMainNav.DataSource = dr
        Me.rptMainNav.DataBind()
    End Sub

    Private Sub rptMainNav_ItemDataBound(ByVal sender As Object, 
ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) 
Handles rptMainNav.ItemDataBound
        If Not Request.QueryString("mainID") Is Nothing Then
            If e.Item.DataItem("mainID") = Request.QueryString("mainID") Then
                Dim link As HyperLink = e.Item.FindControl("linkMainNav")
                link.CssClass = "navigatieTopSelected"
            End If
        End If
    End Sub


Data komt overigens uit een DAL

[ Voor 25% gewijzigd door Folkert op 01-07-2004 23:57 ]


  • Folkert
  • Registratie: September 2001
  • Laatst online: 21:33
Visual Basic .NET:
1
If e.Item.ItemType = ListItemType.Item Then


En dat was de gouden (ontbrekende) regel....

gorgi_19 & whoami... _/-\o_ _/-\o_ _/-\o_

Muchas gracias!!!!

Weer wat geleerd op de de repeater. Ik wist niet dat deze de volgorde hanteert zoals deze is opgesteld, dus eerst de headertemplate, itemtemplate etc....

De fout was dus eigenlijk dat ik een control zocht die werd gezocht in een niet bestaande headertemplate (als eerste template van de repeater).

[ Voor 19% gewijzigd door Folkert op 02-07-2004 00:17 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Defensief programmeren he. ;)
Ik geloof dat die controle trouwens ook bij een DataGrid nodig is; dit is dus niet enkel beperkt tot bij een DataRepeater.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 02 juli 2004 @ 08:49:
Defensief programmeren he. ;)
Ik geloof dat die controle trouwens ook bij een DataGrid nodig is; dit is dus niet enkel beperkt tot bij een DataRepeater.
* gorgi_19 weet het eigenlijk wel zeker. :) DataList, Datagrid, Repeater; alles wat met deze items werkt, heeft dit nodig. :)

Voor de topicstarter: Controleer ook op AlternateItem :)

[ Voor 21% gewijzigd door gorgi_19 op 02-07-2004 09:13 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Folkert
  • Registratie: September 2001
  • Laatst online: 21:33
Ik merkte nadat ik had gecontroleerd op itemtemplate dat ik ook de alternate template moest meenemen aangezien anders alleen item 1,3,5 etc reageerden op de databound, ondanks het feit dat deze allen in de itemtemplate stonden en ik geen alternate template had gedefinieerd.

Nu werkt het op alle items (dus ook op item 2,4,6 etc = alternateTemplate)
Pagina: 1