AddHandler not working

Discussion in 'ASP .Net Web Controls' started by Nathan Sokalski, Oct 2, 2007.

  1. I have a section of my code that dynamically creates LinkButtons to allow
    the user to go to the page containing a question they have not answered. The
    code that creates the LinkButton is called, as well as the AddHandler line
    (I ran a Debug and saw that it executes this code, and the links are
    displayed on the page afterwards). However, the eventhandler is not called
    when the LinkButton is clicked. Here is the code that dynamically generates
    the LinkButtons as well as the eventhandler I want to be called:


    'The code that generates the LinkButtons:
    Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
    System.Web.UI.ImageClickEventArgs) Handles btnSubmit.Click
    Me.submitanswers()
    If Me.completetest() Then
    'Code that I use to update my database, not involved in this
    problem because Me.completetest() returns false
    Else
    Me.lblAnswered.Text = String.Format("{0} of 75 Questions
    Answered (Not Answered: ", CStr(Me.questionsanswered()))
    Dim myconnection As New
    SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    Dim cmd As New SqlCommand("", myconnection)
    Dim qnumreader As SqlDataReader
    Dim insertafter As Integer =
    Me.Form.Controls.IndexOf(Me.lblAnswered) + 1
    For i As Integer = 1 To 75
    cmd.CommandText = String.Format("SELECT
    questions.questionnumber FROM useranswers INNER JOIN questions ON
    useranswers.questionid=questions.questionid WHERE
    questions.questionnumber={0} AND useranswers.testid={1} AND
    useranswers.userid={2}", i, CStr(Session("testid")),
    CStr(Session("userid")))
    myconnection.Open()
    qnumreader = cmd.ExecuteReader()
    If Not qnumreader.Read() Then
    Dim questionlink As New LinkButton()
    questionlink.CausesValidation = False
    questionlink.CommandArgument = i
    questionlink.CssClass = "answerRED"
    questionlink.EnableViewState = False
    questionlink.Text = i & " "
    AddHandler questionlink.Command, AddressOf
    Me.QuestionLinkCommand
    Me.Form.Controls.AddAt(insertafter, questionlink)
    insertafter += 1
    End If
    myconnection.Close()
    Next
    Me.lblCloseParen.Visible = True
    End If
    End Sub

    'The eventhandler I want to use:
    Private Sub QuestionLinkCommand(ByVal sender As Object, ByVal e As
    System.Web.UI.WebControls.CommandEventArgs)
    Dim myconnection As New
    SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    Dim cmd As New SqlCommand("SELECT subgroupid FROM questions WHERE
    questionnumber=" & e.CommandArgument, myconnection)
    myconnection.Open()
    Session("subgroupid") = CInt(cmd.ExecuteScalar())
    myconnection.Close()
    End Sub


    When I run my Application, the code in btnSubmit_Click works as I expect (or
    at least it looks like it did), but when I click the dynamically created
    LinkButtons (variable name questionlink), they postback but do not trigger
    the QuestionLinkCommand method (the QuestionLinkCommand never gets executed
    when I do a debug session). I cannot figure out why they are not triggering
    this eventhandler, because I use AddHandler statements when creating the
    LinkButtons, and the eventhandler has the correct signature. Is there
    something I am doing wrong? Thanks.
    --
    Nathan Sokalski

    http://www.nathansokalski.com/
     
    Nathan Sokalski, Oct 2, 2007
    #1
    1. Advertising

  2. Nathan Sokalski

    Charlie Guest

    Try changing the line

    Dim questionlink As New LinkButton()

    to

    Dim WithEvents questionlink As New LinkButton()

    Does that work?


    "Nathan Sokalski" wrote:

    > I have a section of my code that dynamically creates LinkButtons to allow
    > the user to go to the page containing a question they have not answered. The
    > code that creates the LinkButton is called, as well as the AddHandler line
    > (I ran a Debug and saw that it executes this code, and the links are
    > displayed on the page afterwards). However, the eventhandler is not called
    > when the LinkButton is clicked. Here is the code that dynamically generates
    > the LinkButtons as well as the eventhandler I want to be called:
    >
    >
    > 'The code that generates the LinkButtons:
    > Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
    > System.Web.UI.ImageClickEventArgs) Handles btnSubmit.Click
    > Me.submitanswers()
    > If Me.completetest() Then
    > 'Code that I use to update my database, not involved in this
    > problem because Me.completetest() returns false
    > Else
    > Me.lblAnswered.Text = String.Format("{0} of 75 Questions
    > Answered (Not Answered: ", CStr(Me.questionsanswered()))
    > Dim myconnection As New
    > SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > Dim cmd As New SqlCommand("", myconnection)
    > Dim qnumreader As SqlDataReader
    > Dim insertafter As Integer =
    > Me.Form.Controls.IndexOf(Me.lblAnswered) + 1
    > For i As Integer = 1 To 75
    > cmd.CommandText = String.Format("SELECT
    > questions.questionnumber FROM useranswers INNER JOIN questions ON
    > useranswers.questionid=questions.questionid WHERE
    > questions.questionnumber={0} AND useranswers.testid={1} AND
    > useranswers.userid={2}", i, CStr(Session("testid")),
    > CStr(Session("userid")))
    > myconnection.Open()
    > qnumreader = cmd.ExecuteReader()
    > If Not qnumreader.Read() Then
    > Dim questionlink As New LinkButton()
    > questionlink.CausesValidation = False
    > questionlink.CommandArgument = i
    > questionlink.CssClass = "answerRED"
    > questionlink.EnableViewState = False
    > questionlink.Text = i & " "
    > AddHandler questionlink.Command, AddressOf
    > Me.QuestionLinkCommand
    > Me.Form.Controls.AddAt(insertafter, questionlink)
    > insertafter += 1
    > End If
    > myconnection.Close()
    > Next
    > Me.lblCloseParen.Visible = True
    > End If
    > End Sub
    >
    > 'The eventhandler I want to use:
    > Private Sub QuestionLinkCommand(ByVal sender As Object, ByVal e As
    > System.Web.UI.WebControls.CommandEventArgs)
    > Dim myconnection As New
    > SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > Dim cmd As New SqlCommand("SELECT subgroupid FROM questions WHERE
    > questionnumber=" & e.CommandArgument, myconnection)
    > myconnection.Open()
    > Session("subgroupid") = CInt(cmd.ExecuteScalar())
    > myconnection.Close()
    > End Sub
    >
    >
    > When I run my Application, the code in btnSubmit_Click works as I expect (or
    > at least it looks like it did), but when I click the dynamically created
    > LinkButtons (variable name questionlink), they postback but do not trigger
    > the QuestionLinkCommand method (the QuestionLinkCommand never gets executed
    > when I do a debug session). I cannot figure out why they are not triggering
    > this eventhandler, because I use AddHandler statements when creating the
    > LinkButtons, and the eventhandler has the correct signature. Is there
    > something I am doing wrong? Thanks.
    > --
    > Nathan Sokalski
    >
    > http://www.nathansokalski.com/
    >
    >
    >
     
    Charlie, Oct 2, 2007
    #2
    1. Advertising

  3. No, if I add the WithEvents keyword I recieve the message:

    'WithEvents' is not valid on a local variable declaration.

    That was a good suggestion (when I read your reply I thought that might be
    it), but unfortunately it wasn't. Any other ideas? Thanks.
    --
    Nathan Sokalski

    http://www.nathansokalski.com/

    "Charlie" <> wrote in message
    news:...
    > Try changing the line
    >
    > Dim questionlink As New LinkButton()
    >
    > to
    >
    > Dim WithEvents questionlink As New LinkButton()
    >
    > Does that work?
    >
    >
    > "Nathan Sokalski" wrote:
    >
    >> I have a section of my code that dynamically creates LinkButtons to allow
    >> the user to go to the page containing a question they have not answered.
    >> The
    >> code that creates the LinkButton is called, as well as the AddHandler
    >> line
    >> (I ran a Debug and saw that it executes this code, and the links are
    >> displayed on the page afterwards). However, the eventhandler is not
    >> called
    >> when the LinkButton is clicked. Here is the code that dynamically
    >> generates
    >> the LinkButtons as well as the eventhandler I want to be called:
    >>
    >>
    >> 'The code that generates the LinkButtons:
    >> Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
    >> System.Web.UI.ImageClickEventArgs) Handles btnSubmit.Click
    >> Me.submitanswers()
    >> If Me.completetest() Then
    >> 'Code that I use to update my database, not involved in this
    >> problem because Me.completetest() returns false
    >> Else
    >> Me.lblAnswered.Text = String.Format("{0} of 75 Questions
    >> Answered (Not Answered: ", CStr(Me.questionsanswered()))
    >> Dim myconnection As New
    >> SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >> Dim cmd As New SqlCommand("", myconnection)
    >> Dim qnumreader As SqlDataReader
    >> Dim insertafter As Integer =
    >> Me.Form.Controls.IndexOf(Me.lblAnswered) + 1
    >> For i As Integer = 1 To 75
    >> cmd.CommandText = String.Format("SELECT
    >> questions.questionnumber FROM useranswers INNER JOIN questions ON
    >> useranswers.questionid=questions.questionid WHERE
    >> questions.questionnumber={0} AND useranswers.testid={1} AND
    >> useranswers.userid={2}", i, CStr(Session("testid")),
    >> CStr(Session("userid")))
    >> myconnection.Open()
    >> qnumreader = cmd.ExecuteReader()
    >> If Not qnumreader.Read() Then
    >> Dim questionlink As New LinkButton()
    >> questionlink.CausesValidation = False
    >> questionlink.CommandArgument = i
    >> questionlink.CssClass = "answerRED"
    >> questionlink.EnableViewState = False
    >> questionlink.Text = i & " "
    >> AddHandler questionlink.Command, AddressOf
    >> Me.QuestionLinkCommand
    >> Me.Form.Controls.AddAt(insertafter, questionlink)
    >> insertafter += 1
    >> End If
    >> myconnection.Close()
    >> Next
    >> Me.lblCloseParen.Visible = True
    >> End If
    >> End Sub
    >>
    >> 'The eventhandler I want to use:
    >> Private Sub QuestionLinkCommand(ByVal sender As Object, ByVal e As
    >> System.Web.UI.WebControls.CommandEventArgs)
    >> Dim myconnection As New
    >> SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >> Dim cmd As New SqlCommand("SELECT subgroupid FROM questions WHERE
    >> questionnumber=" & e.CommandArgument, myconnection)
    >> myconnection.Open()
    >> Session("subgroupid") = CInt(cmd.ExecuteScalar())
    >> myconnection.Close()
    >> End Sub
    >>
    >>
    >> When I run my Application, the code in btnSubmit_Click works as I expect
    >> (or
    >> at least it looks like it did), but when I click the dynamically created
    >> LinkButtons (variable name questionlink), they postback but do not
    >> trigger
    >> the QuestionLinkCommand method (the QuestionLinkCommand never gets
    >> executed
    >> when I do a debug session). I cannot figure out why they are not
    >> triggering
    >> this eventhandler, because I use AddHandler statements when creating the
    >> LinkButtons, and the eventhandler has the correct signature. Is there
    >> something I am doing wrong? Thanks.
    >> --
    >> Nathan Sokalski
    >>
    >> http://www.nathansokalski.com/
    >>
    >>
    >>
     
    Nathan Sokalski, Oct 2, 2007
    #3
  4. Nathan Sokalski

    Charlie Guest

    Put the declaration of questionlink outside of the btnSubmit_Click code
    block, in the general declarations area...

    public withevents questionlink as New LinkButton()
    inside your codeblock, remove the dim questionlink line.

    you could also scope the linkbutton as public or friend.

    does that work?

    "Nathan Sokalski" wrote:

    > No, if I add the WithEvents keyword I recieve the message:
    >
    > 'WithEvents' is not valid on a local variable declaration.
    >
    > That was a good suggestion (when I read your reply I thought that might be
    > it), but unfortunately it wasn't. Any other ideas? Thanks.
    > --
    > Nathan Sokalski
    >
    > http://www.nathansokalski.com/
    >
    > "Charlie" <> wrote in message
    > news:...
    > > Try changing the line
    > >
    > > Dim questionlink As New LinkButton()
    > >
    > > to
    > >
    > > Dim WithEvents questionlink As New LinkButton()
    > >
    > > Does that work?
    > >
    > >
    > > "Nathan Sokalski" wrote:
    > >
    > >> I have a section of my code that dynamically creates LinkButtons to allow
    > >> the user to go to the page containing a question they have not answered.
    > >> The
    > >> code that creates the LinkButton is called, as well as the AddHandler
    > >> line
    > >> (I ran a Debug and saw that it executes this code, and the links are
    > >> displayed on the page afterwards). However, the eventhandler is not
    > >> called
    > >> when the LinkButton is clicked. Here is the code that dynamically
    > >> generates
    > >> the LinkButtons as well as the eventhandler I want to be called:
    > >>
    > >>
    > >> 'The code that generates the LinkButtons:
    > >> Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
    > >> System.Web.UI.ImageClickEventArgs) Handles btnSubmit.Click
    > >> Me.submitanswers()
    > >> If Me.completetest() Then
    > >> 'Code that I use to update my database, not involved in this
    > >> problem because Me.completetest() returns false
    > >> Else
    > >> Me.lblAnswered.Text = String.Format("{0} of 75 Questions
    > >> Answered (Not Answered: ", CStr(Me.questionsanswered()))
    > >> Dim myconnection As New
    > >> SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > >> Dim cmd As New SqlCommand("", myconnection)
    > >> Dim qnumreader As SqlDataReader
    > >> Dim insertafter As Integer =
    > >> Me.Form.Controls.IndexOf(Me.lblAnswered) + 1
    > >> For i As Integer = 1 To 75
    > >> cmd.CommandText = String.Format("SELECT
    > >> questions.questionnumber FROM useranswers INNER JOIN questions ON
    > >> useranswers.questionid=questions.questionid WHERE
    > >> questions.questionnumber={0} AND useranswers.testid={1} AND
    > >> useranswers.userid={2}", i, CStr(Session("testid")),
    > >> CStr(Session("userid")))
    > >> myconnection.Open()
    > >> qnumreader = cmd.ExecuteReader()
    > >> If Not qnumreader.Read() Then
    > >> Dim questionlink As New LinkButton()
    > >> questionlink.CausesValidation = False
    > >> questionlink.CommandArgument = i
    > >> questionlink.CssClass = "answerRED"
    > >> questionlink.EnableViewState = False
    > >> questionlink.Text = i & " "
    > >> AddHandler questionlink.Command, AddressOf
    > >> Me.QuestionLinkCommand
    > >> Me.Form.Controls.AddAt(insertafter, questionlink)
    > >> insertafter += 1
    > >> End If
    > >> myconnection.Close()
    > >> Next
    > >> Me.lblCloseParen.Visible = True
    > >> End If
    > >> End Sub
    > >>
    > >> 'The eventhandler I want to use:
    > >> Private Sub QuestionLinkCommand(ByVal sender As Object, ByVal e As
    > >> System.Web.UI.WebControls.CommandEventArgs)
    > >> Dim myconnection As New
    > >> SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > >> Dim cmd As New SqlCommand("SELECT subgroupid FROM questions WHERE
    > >> questionnumber=" & e.CommandArgument, myconnection)
    > >> myconnection.Open()
    > >> Session("subgroupid") = CInt(cmd.ExecuteScalar())
    > >> myconnection.Close()
    > >> End Sub
    > >>
    > >>
    > >> When I run my Application, the code in btnSubmit_Click works as I expect
    > >> (or
    > >> at least it looks like it did), but when I click the dynamically created
    > >> LinkButtons (variable name questionlink), they postback but do not
    > >> trigger
    > >> the QuestionLinkCommand method (the QuestionLinkCommand never gets
    > >> executed
    > >> when I do a debug session). I cannot figure out why they are not
    > >> triggering
    > >> this eventhandler, because I use AddHandler statements when creating the
    > >> LinkButtons, and the eventhandler has the correct signature. Is there
    > >> something I am doing wrong? Thanks.
    > >> --
    > >> Nathan Sokalski
    > >>
    > >> http://www.nathansokalski.com/
    > >>
    > >>
    > >>

    >
    >
    >
     
    Charlie, Oct 2, 2007
    #4
  5. Nathan,

    Here is a simple sample of dynamicly creating textboxes with events.

    Will you be so kind if you send next time problems to these newsgroup to
    show a simple sample instead of almost a complete sample. We want to help
    you, however not doing a daytime job by investigating parts which are not
    relevant to your question.

    Cor
     
    Cor Ligthert[MVP], Oct 2, 2007
    #5
  6. Cor Ligthert[MVP], Oct 2, 2007
    #6
  7. On Oct 1, 9:38 pm, "Nathan Sokalski" <> wrote:
    > I have a section of my code that dynamically creates LinkButtons to allow
    > the user to go to the page containing a question they have not answered. The
    > code that creates the LinkButton is called, as well as the AddHandler line
    > (I ran a Debug and saw that it executes this code, and the links are
    > displayed on the page afterwards). However, the eventhandler is not called
    > when the LinkButton is clicked. Here is the code that dynamically generates
    > the LinkButtons as well as the eventhandler I want to be called:
    >
    > 'The code that generates the LinkButtons:
    > Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
    > System.Web.UI.ImageClickEventArgs) Handles btnSubmit.Click
    > Me.submitanswers()
    > If Me.completetest() Then
    > 'Code that I use to update my database, not involved in this
    > problem because Me.completetest() returns false
    > Else
    > Me.lblAnswered.Text = String.Format("{0} of 75 Questions
    > Answered (Not Answered: ", CStr(Me.questionsanswered()))
    > Dim myconnection As New
    > SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > Dim cmd As New SqlCommand("", myconnection)
    > Dim qnumreader As SqlDataReader
    > Dim insertafter As Integer =
    > Me.Form.Controls.IndexOf(Me.lblAnswered) + 1
    > For i As Integer = 1 To 75
    > cmd.CommandText = String.Format("SELECT
    > questions.questionnumber FROM useranswers INNER JOIN questions ON
    > useranswers.questionid=questions.questionid WHERE
    > questions.questionnumber={0} AND useranswers.testid={1} AND
    > useranswers.userid={2}", i, CStr(Session("testid")),
    > CStr(Session("userid")))
    > myconnection.Open()
    > qnumreader = cmd.ExecuteReader()
    > If Not qnumreader.Read() Then
    > Dim questionlink As New LinkButton()
    > questionlink.CausesValidation = False
    > questionlink.CommandArgument = i
    > questionlink.CssClass = "answerRED"
    > questionlink.EnableViewState = False
    > questionlink.Text = i & " "
    > AddHandler questionlink.Command, AddressOf
    > Me.QuestionLinkCommand
    > Me.Form.Controls.AddAt(insertafter, questionlink)
    > insertafter += 1
    > End If
    > myconnection.Close()
    > Next
    > Me.lblCloseParen.Visible = True
    > End If
    > End Sub
    >
    > 'The eventhandler I want to use:
    > Private Sub QuestionLinkCommand(ByVal sender As Object, ByVal e As
    > System.Web.UI.WebControls.CommandEventArgs)
    > Dim myconnection As New
    > SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > Dim cmd As New SqlCommand("SELECT subgroupid FROM questions WHERE
    > questionnumber=" & e.CommandArgument, myconnection)
    > myconnection.Open()
    > Session("subgroupid") = CInt(cmd.ExecuteScalar())
    > myconnection.Close()
    > End Sub
    >
    > When I run my Application, the code in btnSubmit_Click works as I expect (or
    > at least it looks like it did), but when I click the dynamically created
    > LinkButtons (variable name questionlink), they postback but do not trigger
    > the QuestionLinkCommand method (the QuestionLinkCommand never gets executed
    > when I do a debug session). I cannot figure out why they are not triggering
    > this eventhandler, because I use AddHandler statements when creating the
    > LinkButtons, and the eventhandler has the correct signature. Is there
    > something I am doing wrong? Thanks.
    > --
    > Nathan Sokalski
    > ://www.nathansokalski.com/


    You apparently aren't to familiar with the programming modal of
    ASP.NET? You need to use AddHandler to add the event listener before
    the child control's event are handled (like in the Load event of the
    Page), otherwise the dynamic event won't exist when it's time to
    process it.

    By the way, if you search the newsgroups before posting you could find
    the answer on your own....

    http://groups.google.com/group/micr...=dynamic control event&qt_g=Search this group

    Thanks,

    Seth Rowe
     
    rowe_newsgroups, Oct 2, 2007
    #7
  8. Nathan Sokalski wrote:
    > I have a section of my code that dynamically creates LinkButtons to
    > allow the user to go to the page containing a question they have not
    > answered. The code that creates the LinkButton is called, as well as
    > the AddHandler line (I ran a Debug and saw that it executes this
    > code, and the links are displayed on the page afterwards). However,
    > the eventhandler is not called when the LinkButton is clicked. Here
    > is the code that dynamically generates the LinkButtons as well as the
    > eventhandler I want to be called:


    <snip>

    You have to tell it to AutoPostBack. Incidentally, you can use "With" to
    save a bit of typing:-

    > If Not qnumreader.Read() Then
    > Dim questionlink As New LinkButton()

    With questionlink
    .CausesValidation = False
    .CommandArgument = i
    .CssClass = "answerRED"
    .EnableViewState = False
    .Text = i & "&nbsp;"
    .AutoPostBack = True
    End With
    > AddHandler questionlink.Command, AddressOf
    > Me.QuestionLinkCommand
    > Me.Form.Controls.AddAt(insertafter, questionlink)
    > insertafter += 1
    > End If


    HTH

    Andrew
     
    Andrew Morton, Oct 2, 2007
    #8
  9. Nathan Sokalski

    bruce barker Guest

    asp.net pages are stateless. you rendered the linkbuton and added to
    handler on the click event. but when the user links on th button and the
    asp.net is run again, the page does create th linkbutton and add the
    handler, so the event is ignored.

    your code needs to remember it added the linkbutton and handler during
    previous postback and recreate the linkbutton and handler during the
    oninit event. you can save your state in session or viewstate.

    -- bruce (sqlwork.com)

    Nathan Sokalski wrote:
    > I have a section of my code that dynamically creates LinkButtons to allow
    > the user to go to the page containing a question they have not answered. The
    > code that creates the LinkButton is called, as well as the AddHandler line
    > (I ran a Debug and saw that it executes this code, and the links are
    > displayed on the page afterwards). However, the eventhandler is not called
    > when the LinkButton is clicked. Here is the code that dynamically generates
    > the LinkButtons as well as the eventhandler I want to be called:
    >
    >
    > 'The code that generates the LinkButtons:
    > Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
    > System.Web.UI.ImageClickEventArgs) Handles btnSubmit.Click
    > Me.submitanswers()
    > If Me.completetest() Then
    > 'Code that I use to update my database, not involved in this
    > problem because Me.completetest() returns false
    > Else
    > Me.lblAnswered.Text = String.Format("{0} of 75 Questions
    > Answered (Not Answered: ", CStr(Me.questionsanswered()))
    > Dim myconnection As New
    > SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > Dim cmd As New SqlCommand("", myconnection)
    > Dim qnumreader As SqlDataReader
    > Dim insertafter As Integer =
    > Me.Form.Controls.IndexOf(Me.lblAnswered) + 1
    > For i As Integer = 1 To 75
    > cmd.CommandText = String.Format("SELECT
    > questions.questionnumber FROM useranswers INNER JOIN questions ON
    > useranswers.questionid=questions.questionid WHERE
    > questions.questionnumber={0} AND useranswers.testid={1} AND
    > useranswers.userid={2}", i, CStr(Session("testid")),
    > CStr(Session("userid")))
    > myconnection.Open()
    > qnumreader = cmd.ExecuteReader()
    > If Not qnumreader.Read() Then
    > Dim questionlink As New LinkButton()
    > questionlink.CausesValidation = False
    > questionlink.CommandArgument = i
    > questionlink.CssClass = "answerRED"
    > questionlink.EnableViewState = False
    > questionlink.Text = i & "&nbsp;"
    > AddHandler questionlink.Command, AddressOf
    > Me.QuestionLinkCommand
    > Me.Form.Controls.AddAt(insertafter, questionlink)
    > insertafter += 1
    > End If
    > myconnection.Close()
    > Next
    > Me.lblCloseParen.Visible = True
    > End If
    > End Sub
    >
    > 'The eventhandler I want to use:
    > Private Sub QuestionLinkCommand(ByVal sender As Object, ByVal e As
    > System.Web.UI.WebControls.CommandEventArgs)
    > Dim myconnection As New
    > SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > Dim cmd As New SqlCommand("SELECT subgroupid FROM questions WHERE
    > questionnumber=" & e.CommandArgument, myconnection)
    > myconnection.Open()
    > Session("subgroupid") = CInt(cmd.ExecuteScalar())
    > myconnection.Close()
    > End Sub
    >
    >
    > When I run my Application, the code in btnSubmit_Click works as I expect (or
    > at least it looks like it did), but when I click the dynamically created
    > LinkButtons (variable name questionlink), they postback but do not trigger
    > the QuestionLinkCommand method (the QuestionLinkCommand never gets executed
    > when I do a debug session). I cannot figure out why they are not triggering
    > this eventhandler, because I use AddHandler statements when creating the
    > LinkButtons, and the eventhandler has the correct signature. Is there
    > something I am doing wrong? Thanks.
     
    bruce barker, Oct 2, 2007
    #9
  10. This is a LinkButton, it does not need or have an AutoPostBack property. And
    take note that in my original post I stated that it does do a PostBack, it
    just doesn't trigger the eventhandler I attempted to assign it.
    --
    Nathan Sokalski

    http://www.nathansokalski.com/

    "Andrew Morton" <> wrote in message
    news:...
    > Nathan Sokalski wrote:
    >> I have a section of my code that dynamically creates LinkButtons to
    >> allow the user to go to the page containing a question they have not
    >> answered. The code that creates the LinkButton is called, as well as
    >> the AddHandler line (I ran a Debug and saw that it executes this
    >> code, and the links are displayed on the page afterwards). However,
    >> the eventhandler is not called when the LinkButton is clicked. Here
    >> is the code that dynamically generates the LinkButtons as well as the
    >> eventhandler I want to be called:

    >
    > <snip>
    >
    > You have to tell it to AutoPostBack. Incidentally, you can use "With" to
    > save a bit of typing:-
    >
    >> If Not qnumreader.Read() Then
    >> Dim questionlink As New LinkButton()

    > With questionlink
    > .CausesValidation = False
    > .CommandArgument = i
    > .CssClass = "answerRED"
    > .EnableViewState = False
    > .Text = i & "&nbsp;"
    > .AutoPostBack = True
    > End With
    >> AddHandler questionlink.Command, AddressOf
    >> Me.QuestionLinkCommand
    >> Me.Form.Controls.AddAt(insertafter, questionlink)
    >> insertafter += 1
    >> End If

    >
    > HTH
    >
    > Andrew
    >
     
    Nathan Sokalski, Oct 2, 2007
    #10
  11. The only way I can come up with to run this code in the Load event is to
    create a Hidden control and have btnSubmit (the Button I am clicking to
    cause the postback) assign it a value using JavaScript prior to doing the
    postback. This would work, but I was hoping to not need to have extra
    Controls for things like this. Is there a more efficient way, or am I stuck
    with using an extra Hidden control? Thanks.
    --
    Nathan Sokalski

    http://www.nathansokalski.com/

    "rowe_newsgroups" <> wrote in message
    news:...
    > On Oct 1, 9:38 pm, "Nathan Sokalski" <> wrote:
    >> I have a section of my code that dynamically creates LinkButtons to allow
    >> the user to go to the page containing a question they have not answered.
    >> The
    >> code that creates the LinkButton is called, as well as the AddHandler
    >> line
    >> (I ran a Debug and saw that it executes this code, and the links are
    >> displayed on the page afterwards). However, the eventhandler is not
    >> called
    >> when the LinkButton is clicked. Here is the code that dynamically
    >> generates
    >> the LinkButtons as well as the eventhandler I want to be called:
    >>
    >> 'The code that generates the LinkButtons:
    >> Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
    >> System.Web.UI.ImageClickEventArgs) Handles btnSubmit.Click
    >> Me.submitanswers()
    >> If Me.completetest() Then
    >> 'Code that I use to update my database, not involved in this
    >> problem because Me.completetest() returns false
    >> Else
    >> Me.lblAnswered.Text = String.Format("{0} of 75 Questions
    >> Answered (Not Answered: ", CStr(Me.questionsanswered()))
    >> Dim myconnection As New
    >> SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >> Dim cmd As New SqlCommand("", myconnection)
    >> Dim qnumreader As SqlDataReader
    >> Dim insertafter As Integer =
    >> Me.Form.Controls.IndexOf(Me.lblAnswered) + 1
    >> For i As Integer = 1 To 75
    >> cmd.CommandText = String.Format("SELECT
    >> questions.questionnumber FROM useranswers INNER JOIN questions ON
    >> useranswers.questionid=questions.questionid WHERE
    >> questions.questionnumber={0} AND useranswers.testid={1} AND
    >> useranswers.userid={2}", i, CStr(Session("testid")),
    >> CStr(Session("userid")))
    >> myconnection.Open()
    >> qnumreader = cmd.ExecuteReader()
    >> If Not qnumreader.Read() Then
    >> Dim questionlink As New LinkButton()
    >> questionlink.CausesValidation = False
    >> questionlink.CommandArgument = i
    >> questionlink.CssClass = "answerRED"
    >> questionlink.EnableViewState = False
    >> questionlink.Text = i & " "
    >> AddHandler questionlink.Command, AddressOf
    >> Me.QuestionLinkCommand
    >> Me.Form.Controls.AddAt(insertafter, questionlink)
    >> insertafter += 1
    >> End If
    >> myconnection.Close()
    >> Next
    >> Me.lblCloseParen.Visible = True
    >> End If
    >> End Sub
    >>
    >> 'The eventhandler I want to use:
    >> Private Sub QuestionLinkCommand(ByVal sender As Object, ByVal e As
    >> System.Web.UI.WebControls.CommandEventArgs)
    >> Dim myconnection As New
    >> SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >> Dim cmd As New SqlCommand("SELECT subgroupid FROM questions WHERE
    >> questionnumber=" & e.CommandArgument, myconnection)
    >> myconnection.Open()
    >> Session("subgroupid") = CInt(cmd.ExecuteScalar())
    >> myconnection.Close()
    >> End Sub
    >>
    >> When I run my Application, the code in btnSubmit_Click works as I expect
    >> (or
    >> at least it looks like it did), but when I click the dynamically created
    >> LinkButtons (variable name questionlink), they postback but do not
    >> trigger
    >> the QuestionLinkCommand method (the QuestionLinkCommand never gets
    >> executed
    >> when I do a debug session). I cannot figure out why they are not
    >> triggering
    >> this eventhandler, because I use AddHandler statements when creating the
    >> LinkButtons, and the eventhandler has the correct signature. Is there
    >> something I am doing wrong? Thanks.
    >> --
    >> Nathan Sokalski
    >> ://www.nathansokalski.com/

    >
    > You apparently aren't to familiar with the programming modal of
    > ASP.NET? You need to use AddHandler to add the event listener before
    > the child control's event are handled (like in the Load event of the
    > Page), otherwise the dynamic event won't exist when it's time to
    > process it.
    >
    > By the way, if you search the newsgroups before posting you could find
    > the answer on your own....
    >
    > http://groups.google.com/group/micr...=dynamic control event&qt_g=Search this group
    >
    > Thanks,
    >
    > Seth Rowe
    >
     
    Nathan Sokalski, Oct 2, 2007
    #11
  12. On Oct 2, 11:55 am, "Nathan Sokalski" <> wrote:
    > The only way I can come up with to run this code in the Load event is to
    > create a Hidden control and have btnSubmit (the Button I am clicking to
    > cause the postback) assign it a value using JavaScript prior to doing the
    > postback. This would work, but I was hoping to not need to have extra
    > Controls for things like this. Is there a more efficient way, or am I stuck
    > with using an extra Hidden control? Thanks.
    > --
    > Nathan Sokalski
    > ://www.nathansokalski.com/
    >
    > "rowe_newsgroups" <> wrote in message
    >
    > news:...
    >
    > > On Oct 1, 9:38 pm, "Nathan Sokalski" <> wrote:
    > >> I have a section of my code that dynamically creates LinkButtons to allow
    > >> the user to go to the page containing a question they have not answered.
    > >> The
    > >> code that creates the LinkButton is called, as well as the AddHandler
    > >> line
    > >> (I ran a Debug and saw that it executes this code, and the links are
    > >> displayed on the page afterwards). However, the eventhandler is not
    > >> called
    > >> when the LinkButton is clicked. Here is the code that dynamically
    > >> generates
    > >> the LinkButtons as well as the eventhandler I want to be called:

    >
    > >> 'The code that generates the LinkButtons:
    > >> Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
    > >> System.Web.UI.ImageClickEventArgs) Handles btnSubmit.Click
    > >> Me.submitanswers()
    > >> If Me.completetest() Then
    > >> 'Code that I use to update my database, not involved in this
    > >> problem because Me.completetest() returns false
    > >> Else
    > >> Me.lblAnswered.Text = String.Format("{0} of 75 Questions
    > >> Answered (Not Answered: ", CStr(Me.questionsanswered()))
    > >> Dim myconnection As New
    > >> SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > >> Dim cmd As New SqlCommand("", myconnection)
    > >> Dim qnumreader As SqlDataReader
    > >> Dim insertafter As Integer =
    > >> Me.Form.Controls.IndexOf(Me.lblAnswered) + 1
    > >> For i As Integer = 1 To 75
    > >> cmd.CommandText = String.Format("SELECT
    > >> questions.questionnumber FROM useranswers INNER JOIN questions ON
    > >> useranswers.questionid=questions.questionid WHERE
    > >> questions.questionnumber={0} AND useranswers.testid={1} AND
    > >> useranswers.userid={2}", i, CStr(Session("testid")),
    > >> CStr(Session("userid")))
    > >> myconnection.Open()
    > >> qnumreader = cmd.ExecuteReader()
    > >> If Not qnumreader.Read() Then
    > >> Dim questionlink As New LinkButton()
    > >> questionlink.CausesValidation = False
    > >> questionlink.CommandArgument = i
    > >> questionlink.CssClass = "answerRED"
    > >> questionlink.EnableViewState = False
    > >> questionlink.Text = i & " "
    > >> AddHandler questionlink.Command, AddressOf
    > >> Me.QuestionLinkCommand
    > >> Me.Form.Controls.AddAt(insertafter, questionlink)
    > >> insertafter += 1
    > >> End If
    > >> myconnection.Close()
    > >> Next
    > >> Me.lblCloseParen.Visible = True
    > >> End If
    > >> End Sub

    >
    > >> 'The eventhandler I want to use:
    > >> Private Sub QuestionLinkCommand(ByVal sender As Object, ByVal e As
    > >> System.Web.UI.WebControls.CommandEventArgs)
    > >> Dim myconnection As New
    > >> SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    > >> Dim cmd As New SqlCommand("SELECT subgroupid FROM questions WHERE
    > >> questionnumber=" & e.CommandArgument, myconnection)
    > >> myconnection.Open()
    > >> Session("subgroupid") = CInt(cmd.ExecuteScalar())
    > >> myconnection.Close()
    > >> End Sub

    >
    > >> When I run my Application, the code in btnSubmit_Click works as I expect
    > >> (or
    > >> at least it looks like it did), but when I click the dynamically created
    > >> LinkButtons (variable name questionlink), they postback but do not
    > >> trigger
    > >> the QuestionLinkCommand method (the QuestionLinkCommand never gets
    > >> executed
    > >> when I do a debug session). I cannot figure out why they are not
    > >> triggering
    > >> this eventhandler, because I use AddHandler statements when creating the
    > >> LinkButtons, and the eventhandler has the correct signature. Is there
    > >> something I am doing wrong? Thanks.
    > >> --
    > >> Nathan Sokalski
    > >> ://www.nathansokalski.com/

    >
    > > You apparently aren't to familiar with the programming modal of
    > > ASP.NET? You need to use AddHandler to add the event listener before
    > > the child control's event are handled (like in the Load event of the
    > > Page), otherwise the dynamic event won't exist when it's time to
    > > process it.

    >
    > > By the way, if you search the newsgroups before posting you could find
    > > the answer on your own....

    >
    > >http://groups.google.com/group/microsoft.public.dotnet.framework.aspn...

    >
    > > Thanks,

    >
    > > Seth Rowe


    It seems to me after briefly reading your code segment you are only
    creating one LinkButton. A simple approach would then be to add the
    LinkButton at design time with it's Visible property set to false and
    only show the LinkButton when it's necessary, and then hide it again
    in it's event handler. Also, be sure to set EnableViewState to true to
    preserve the Visible state on postbacks.

    Something like:

    ///////////////
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As
    System.EventArgs) Handles Button1.Click
    Me.LinkButton1.Visible = True
    End Sub

    Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As
    System.EventArgs) Handles LinkButton1.Click
    Try
    '// My other code I want to run
    Finally
    Me.LinkButton1.Visible = False
    End Try
    End Sub
    //////////////

    P.S. It's easier on the responders if you just provide a short, easy
    to read sample that demonstrates your problem. It's a pain to decipher
    out the unrelated junk to just get to the problem.

    Thanks,

    Seth Rowe
     
    rowe_newsgroups, Oct 2, 2007
    #12
  13. > It seems to me after briefly reading your code segment you are only
    > creating one LinkButton.


    Nevermind, after rereading your post I now notice the For loop I
    previously missed so disregard my post.

    > P.S. It's easier on the responders if you just provide a short, easy
    > to read sample that demonstrates your problem. It's a pain to decipher
    > out the unrelated junk to just get to the problem.


    As you can now see, useless clutter leads to pointless responses.

    Thanks,

    Seth Rowe
     
    rowe_newsgroups, Oct 2, 2007
    #13
  14. No, I am not just creating one LinkButton. If you missed it, the code that
    creates the LinkButton is inside the loop that starts with:

    For i As Integer = 1 To 75

    There may, in some cases, only be one LinkButton, but depending on the
    specific case there could be anywhere from 1-75 LinkButtons. If there were
    never going to be more than about 5, I would probably do what you said and
    simply change the properties, but that is unfortunately not the case here.
    --
    Nathan Sokalski

    http://www.nathansokalski.com/

    "rowe_newsgroups" <> wrote in message
    news:...
    > On Oct 2, 11:55 am, "Nathan Sokalski" <> wrote:
    >> The only way I can come up with to run this code in the Load event is to
    >> create a Hidden control and have btnSubmit (the Button I am clicking to
    >> cause the postback) assign it a value using JavaScript prior to doing the
    >> postback. This would work, but I was hoping to not need to have extra
    >> Controls for things like this. Is there a more efficient way, or am I
    >> stuck
    >> with using an extra Hidden control? Thanks.
    >> --
    >> Nathan Sokalski
    >> ://www.nathansokalski.com/
    >>
    >> "rowe_newsgroups" <> wrote in message
    >>
    >> news:...
    >>
    >> > On Oct 1, 9:38 pm, "Nathan Sokalski" <> wrote:
    >> >> I have a section of my code that dynamically creates LinkButtons to
    >> >> allow
    >> >> the user to go to the page containing a question they have not
    >> >> answered.
    >> >> The
    >> >> code that creates the LinkButton is called, as well as the AddHandler
    >> >> line
    >> >> (I ran a Debug and saw that it executes this code, and the links are
    >> >> displayed on the page afterwards). However, the eventhandler is not
    >> >> called
    >> >> when the LinkButton is clicked. Here is the code that dynamically
    >> >> generates
    >> >> the LinkButtons as well as the eventhandler I want to be called:

    >>
    >> >> 'The code that generates the LinkButtons:
    >> >> Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
    >> >> System.Web.UI.ImageClickEventArgs) Handles btnSubmit.Click
    >> >> Me.submitanswers()
    >> >> If Me.completetest() Then
    >> >> 'Code that I use to update my database, not involved in
    >> >> this
    >> >> problem because Me.completetest() returns false
    >> >> Else
    >> >> Me.lblAnswered.Text = String.Format("{0} of 75 Questions
    >> >> Answered (Not Answered: ", CStr(Me.questionsanswered()))
    >> >> Dim myconnection As New
    >> >> SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >> >> Dim cmd As New SqlCommand("", myconnection)
    >> >> Dim qnumreader As SqlDataReader
    >> >> Dim insertafter As Integer =
    >> >> Me.Form.Controls.IndexOf(Me.lblAnswered) + 1
    >> >> For i As Integer = 1 To 75
    >> >> cmd.CommandText = String.Format("SELECT
    >> >> questions.questionnumber FROM useranswers INNER JOIN questions ON
    >> >> useranswers.questionid=questions.questionid WHERE
    >> >> questions.questionnumber={0} AND useranswers.testid={1} AND
    >> >> useranswers.userid={2}", i, CStr(Session("testid")),
    >> >> CStr(Session("userid")))
    >> >> myconnection.Open()
    >> >> qnumreader = cmd.ExecuteReader()
    >> >> If Not qnumreader.Read() Then
    >> >> Dim questionlink As New LinkButton()
    >> >> questionlink.CausesValidation = False
    >> >> questionlink.CommandArgument = i
    >> >> questionlink.CssClass = "answerRED"
    >> >> questionlink.EnableViewState = False
    >> >> questionlink.Text = i & " "
    >> >> AddHandler questionlink.Command, AddressOf
    >> >> Me.QuestionLinkCommand
    >> >> Me.Form.Controls.AddAt(insertafter, questionlink)
    >> >> insertafter += 1
    >> >> End If
    >> >> myconnection.Close()
    >> >> Next
    >> >> Me.lblCloseParen.Visible = True
    >> >> End If
    >> >> End Sub

    >>
    >> >> 'The eventhandler I want to use:
    >> >> Private Sub QuestionLinkCommand(ByVal sender As Object, ByVal e As
    >> >> System.Web.UI.WebControls.CommandEventArgs)
    >> >> Dim myconnection As New
    >> >> SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connectionstring"))
    >> >> Dim cmd As New SqlCommand("SELECT subgroupid FROM questions
    >> >> WHERE
    >> >> questionnumber=" & e.CommandArgument, myconnection)
    >> >> myconnection.Open()
    >> >> Session("subgroupid") = CInt(cmd.ExecuteScalar())
    >> >> myconnection.Close()
    >> >> End Sub

    >>
    >> >> When I run my Application, the code in btnSubmit_Click works as I
    >> >> expect
    >> >> (or
    >> >> at least it looks like it did), but when I click the dynamically
    >> >> created
    >> >> LinkButtons (variable name questionlink), they postback but do not
    >> >> trigger
    >> >> the QuestionLinkCommand method (the QuestionLinkCommand never gets
    >> >> executed
    >> >> when I do a debug session). I cannot figure out why they are not
    >> >> triggering
    >> >> this eventhandler, because I use AddHandler statements when creating
    >> >> the
    >> >> LinkButtons, and the eventhandler has the correct signature. Is there
    >> >> something I am doing wrong? Thanks.
    >> >> --
    >> >> Nathan Sokalski
    >> >> ://www.nathansokalski.com/

    >>
    >> > You apparently aren't to familiar with the programming modal of
    >> > ASP.NET? You need to use AddHandler to add the event listener before
    >> > the child control's event are handled (like in the Load event of the
    >> > Page), otherwise the dynamic event won't exist when it's time to
    >> > process it.

    >>
    >> > By the way, if you search the newsgroups before posting you could find
    >> > the answer on your own....

    >>
    >> >http://groups.google.com/group/microsoft.public.dotnet.framework.aspn...

    >>
    >> > Thanks,

    >>
    >> > Seth Rowe

    >
    > It seems to me after briefly reading your code segment you are only
    > creating one LinkButton. A simple approach would then be to add the
    > LinkButton at design time with it's Visible property set to false and
    > only show the LinkButton when it's necessary, and then hide it again
    > in it's event handler. Also, be sure to set EnableViewState to true to
    > preserve the Visible state on postbacks.
    >
    > Something like:
    >
    > ///////////////
    > Protected Sub Button1_Click(ByVal sender As Object, ByVal e As
    > System.EventArgs) Handles Button1.Click
    > Me.LinkButton1.Visible = True
    > End Sub
    >
    > Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As
    > System.EventArgs) Handles LinkButton1.Click
    > Try
    > '// My other code I want to run
    > Finally
    > Me.LinkButton1.Visible = False
    > End Try
    > End Sub
    > //////////////
    >
    > P.S. It's easier on the responders if you just provide a short, easy
    > to read sample that demonstrates your problem. It's a pain to decipher
    > out the unrelated junk to just get to the problem.
    >
    > Thanks,
    >
    > Seth Rowe
    >
     
    Nathan Sokalski, Oct 2, 2007
    #14
  15. Nathan Sokalski wrote:
    > This is a LinkButton, it does not need or have an AutoPostBack
    > property.


    My mistake.

    > And take note that in my original post I stated that it
    > does do a PostBack, it just doesn't trigger the eventhandler I
    > attempted to assign it.


    What errors are highlighted if you use Option Strict On? I ask because in
    the handler you have

    > Dim cmd As New SqlCommand("SELECT subgroupid FROM questions
    > WHERE questionnumber=" & e.CommandArgument, myconnection)


    which would give an error about not being able to use & with the
    e.CommandArgument /object/, so there may be other errors you haven't
    spotted.

    Andrew
     
    Andrew Morton, Oct 3, 2007
    #15
  16. Nathan,

    I gave you a link for a windowsform, because you were talking about a form
    in my idea, but beside that there is as well a sample about a page.

    This is a kind of calendar finding a date on a webpage.

    http://www.vb-tips.com/ASPNetDynamicButton.aspx

    Cor
     
    Cor Ligthert [MVP], Oct 3, 2007
    #16
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jeffrey A. Voigt

    Help w/AddHandler (Not Firing Off)

    Jeffrey A. Voigt, Aug 10, 2003, in forum: ASP .Net
    Replies:
    3
    Views:
    673
    Natty Gur
    Aug 11, 2003
  2. Natty Gur

    Re: Help w/AddHandler (Not Firing Off)

    Natty Gur, Aug 11, 2003, in forum: ASP .Net
    Replies:
    1
    Views:
    449
    Jeff Voigt
    Aug 11, 2003
  3. Tee
    Replies:
    1
    Views:
    3,329
    Martin Dechev
    Feb 18, 2004
  4. RA
    Replies:
    2
    Views:
    2,969
  5. Nathan Sokalski

    AddHandler not working

    Nathan Sokalski, Oct 2, 2007, in forum: ASP .Net
    Replies:
    15
    Views:
    882
    Cor Ligthert [MVP]
    Oct 3, 2007
Loading...

Share This Page