Avatar billede fun22 Nybegynder
14. august 2007 - 19:47 Der er 3 kommentarer og
1 løsning

Handles clause requires a WithEvents variable defined in the cont

Hej

Jeg får følgende fejl på min side:

Handles clause requires a WithEvents variable defined in the containing type or one of its base types.

i denne linie: Handles Repeater2.ItemDataBound

Min kode ser således ud:

------------------------------------------------------------------
.aspx fil:
------------------------------------------------------------------
<table style="width: 100%" cellspacing="0" class="ForumTable">
                        <tr>
                            <td style="width: 66%" class="TableHeader">
                                Forum</td>
                            <td style="width: 7%" class="TableHeader">
                                Emner</td>
                            <td style="width: 7%" class="TableHeader">
                                Indlæg</td>
                            <td style="width: 20%" class="TableHeader">
                                Sidste indlæg</td>
                        </tr>
                        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
                        <ItemTemplate>
                        <tr>
                            <td style="width: 66%" class="Header">
                                <%#Eval("Title")%><asp:Label ID="IDLabel" runat="server" Text='<%#Eval("ID")%>' Visible="false"></asp:Label></td>
                            <td style="width: 7%" class="Header">
                            </td>
                            <td style="width: 7%" class="Header">
                            </td>
                            <td style="width: 20%" class="Header">
                            </td>
                        </tr>
                            <asp:Repeater ID="Repeater2" runat="server" OnItemDataBound="Repeater2_ItemDataBound">
                            <ItemTemplate>
                                <tr>
                                    <td style="width: 66%; padding-left: 10px; padding-bottom: 5px; padding-top: 5px;">
                                        <strong>
                                            <a href="Threads.aspx?ForumID=<%#Eval("ID")%>"><%#Eval("Title")%></a></strong><br />
                                        <span style="font-size: 7pt;"><%#Eval("Description")%></span></td>
                                    <td style="width: 7%; text-align: center; vertical-align:middle; padding-bottom: 5px; padding-top: 5px;">
                                        <asp:Label ID="SubjectCount" runat="server" Text='<%#Eval("ID")%>'></asp:Label></td>
                                    <td style="width: 7%; text-align: center; vertical-align:middle; padding-bottom: 5px; padding-top: 5px;">
                                        <asp:Label ID="TotalCount" runat="server" Text="Label"></asp:Label></td>
                                    <td style="width: 20%; padding-bottom: 5px; padding-top: 5px;">
                                    </td>
                                </tr>
                            </ItemTemplate>
                            </asp:Repeater>
                        </ItemTemplate>
                        </asp:Repeater>
                    </table>
------------------------------------------------------------------
.cs fil:
------------------------------------------------------------------
Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) _
        Handles Repeater1.ItemDataBound

        Dim myRepeater As Repeater = CType(e.Item.FindControl("Repeater2"), Repeater)

        Dim myID As Label = CType(e.Item.FindControl("IDLabel"), Label)
        Dim CatID As Integer = myID.Text

        Dim Connstr As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
        Dim Connection As New SqlConnection(Connstr)

        Dim command As New SqlCommand("SELECT ID, Title, Description from Forums WHERE CategoryID = '" & CatID & "'", Connection)
        Connection.Open()
        myRepeater.DataSource = command.ExecuteReader(CommandBehavior.CloseConnection)
        myRepeater.DataBind()

    End Sub

    Protected Sub Repeater2_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) _
        Handles Repeater2.ItemDataBound

        Dim myID As Label = CType(e.Item.FindControl("SubjectCount"), Label)
        Dim CatID As Integer = myID.Text

        Dim Connstr As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
        Dim Connection As New SqlConnection(Connstr)

        Dim command As New SqlCommand("SELECT Count(*) AS SubjectCount from Forums WHERE Topic = '1' AND ForumID = '" & CatID & "'", Connection)
        Connection.Open()
        Dim Reader As System.Data.SqlClient.SqlDataReader
        Reader = command.ExecuteReader(CommandBehavior.CloseConnection)

        myID.Text = Reader("SubjectCount").ToString


    End Sub

Tror det har noget at gøre med eat repeater2 ligger inden i den anden repeater..
Avatar billede neoman Novice
14. august 2007 - 20:26 #1
Det tror jeg også.

  Protected Sub Repeater2_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) _
        Handles Repeater2.ItemDataBound

skal være
  Protected Sub Repeater2_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
Avatar billede neoman Novice
14. august 2007 - 20:41 #2
Fremover: Hvis du har en Handles blabla på din event handler, så skal du ikke samtidigt bruge  OnItemDataBound="Repeater2_ItemDataBound" i den server control som kalder eventet, fordi så får du eventhandleren kørt to gange.

Din repeater1 har ikke OnItemDataBound, men eventhandleren kører fordi den har Handles Repeater1.ItemDataBound - og det er der ignen problemer med da den ikke er begravet i nogen container, i modsætning til din repeater2.
Avatar billede fun22 Nybegynder
14. august 2007 - 20:50 #3
Super det virker..

Det vil sige at når jeg har bare en repeater så hvis jeg bruger den her:

Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) _
        Handles Repeater1.ItemDataBound

Så er det fint.. Men hvis så jeg har to som her, så skal jeg undlade handles forde den ikke "kan finde sig selv"??
Avatar billede neoman Novice
14. august 2007 - 21:04 #4
nej - det har intet med typen af kontrollen at gøre. Du kan i VB lave wire-up, dvs fortælle systemet hvilken handler skal håndtere hvilket event på to måder. Ved enten at specificere det i taggen, som gjort i din nuværende repeater2, eller ved at bruge Handles... betingelsen i eventhandlerens signatur, som gjort i din repeater1.

Når en kontrol er begravet inde i en anden kontrol, så virker Handles  bare ikke så godt, åbenbart, så det er bare om at angive handleren i taggen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester