Wrox Home  
Search P2P Archive for: Go

  Return to Index  

aspx_beginners thread: Problem adding "OnClick" event dynamically


Message #1 by "Jon Pokroy" <jonmaz@s...> on Fri, 22 Mar 2002 18:30:24 +0100
This is a multi-part message in MIME format.

------=_NextPart_000_0021_01C1D1CF.A1C2D3E0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hi,

I have a problem adding an OnClick EventHandler to a LinkButton in a 
DataGrid.  I get the following error message, and am not sure how to 
deal with it:

Compiler Error Message: BC30390: 
'System.Web.UI.WebControls.LinkButton.Protected Overridable Sub 
OnClick(e As System.EventArgs)' is Protected, and is not accessible in 
this context.


The LinkButton is in a DataGrid, and I am adding the OnClick 
EventHandler in the DataGrid's OnItemDataBound subroutine:

        Sub dg_ItemDataBound(sender As Object, e As 
DataGridItemEventArgs)
                If (e.Item.ItemType =3D ListItemType.EditItem) then
                Dim lbtToggleItemText as LinkButton =3D 
e.Item.FindControl("lbtToggleItemText")
                AddHandler lbtToggleItemText.OnClick, AddressOf 
ToggleViewItemTextDisplay       
                end if
        End sub


and the subroutine called looks like this:

        sub ToggleViewItemTextDisplay(sender as object, e as EventArgs)
         Response.Write("just to show the onclick event has happened")
        end sub


The full code is below (the LinkButton is actually in 
EditItemTemplate.ascx, which is dynamically loaded into an 
EditItemTemplate column at runtime).

Thanks for any help,

JON

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++
THE CODE - THE CODE - THE CODE - THE CODE - THE CODE - THE CODE - THE 
CODE - THE CODE
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++



**************************************
 EditItemTemplate.ascx
**************************************

<%@ Control Language=3D"VB" %>
<asp:LinkButton id=3D"lbtToggleItemText" runat=3D"server" Text=3D"Toggle 
ItemText Display" />





**************************************
 DataGridPage.aspx
**************************************


<%@ Page Language=3D"VB" Debug=3D"true" %>
<%@ Import Namespace=3D"System.Data" %>
<%@ Import Namespace=3D"System.Data.Oledb" %>

<script language=3D"VB" runat=3D"server">

Dim objConn as New OleDbConnection ( 
ConfigurationSettings.AppSettings("ConnectionString") )
Dim ds as Dataset =3D New DataSet()
Dim objAdapter as New OleDbDataAdapter ( "SELECT * from tblItems", 
objConn )

Sub Page_Load(sender as object, e as eventargs)

        objConn.Open()
        objAdapter.Fill(ds, "tblItems")
        dg.DataSource =3D ds
        dg.DataMember =3D "tblItems"
       
        Dim tc1 As New TemplateColumn()
        tc1.HeaderTemplate =3D New DataGridTemplate(ListItemType.Header, 
"Column1")
        tc1.ItemTemplate =3D New DataGridTemplate(ListItemType.Item, 
"Column1")
        '*********************************
        '*** ADD ASCX FILE AS TEMPLATE ***
        '*********************************
        tc1.EditItemTemplate =3D 
Page.LoadTemplate("EditItemTemplate.ascx")
        tc1.FooterTemplate =3D New DataGridTemplate(ListItemType.Footer, 
"Column1")
        dg.Columns.Add(tc1)
       
        If Not Page.IsPostBack Then
        dg.Databind()
        End If

End Sub


sub dg_edit(sender as object, e as DataGridCommandEventArgs)
        dg.edititemindex =3D e.item.itemindex
        dg.databind()
end sub


sub dg_cancel(sender as object, e as DataGridCommandEventArgs)
        dg.edititemindex =3D -1
        dg.databind()
end sub


sub dg_update(sender as object, e as DataGridCommandEventArgs)
        'Put an update function here
end sub


Sub dg_ItemDataBound(sender As Object, e As DataGridItemEventArgs)

        If (e.Item.ItemType =3D ListItemType.EditItem) then
       
        Dim lbtToggleItemText as LinkButton =3D 
e.Item.FindControl("lbtToggleItemText")
        AddHandler lbtToggleItemText.OnClick, AddressOf 
ToggleViewItemTextDisplay
        '*********************************
        'WHY DOESN'T THIS WORK???????
        '*********************************
       
        end if

End sub


sub ToggleViewItemTextDisplay(sender as object, e as EventArgs)
 Response.Write("just to show the onclick event has happened")
end sub

Private Class DataGridTemplate
        Implements ITemplate
        Dim templateType As ListItemType
        Dim columnName As String
        Sub New(ByVal type As ListItemType, ByVal ColName As String)
        templateType =3D type
        columnName =3D ColName
        End Sub
        Sub InstantiateIn(ByVal container As Control) Implements 
ITemplate.InstantiateIn
        Dim lc As New Literal()
        Select Case templateType
        Case ListItemType.Header
        lc.Text =3D "<I><b>Header</b></I>"
        container.Controls.Add(lc)
        Case ListItemType.Item
        lc.Text =3D "Item " & columnName
        container.Controls.Add(lc)
        Case ListItemType.EditItem 
        '*** This is taken care of with the LoadTemplate method above
        Case ListItemType.Footer
        lc.Text =3D "<I><b>Footer</b></I>"
        container.Controls.Add(lc)
        End Select
        End Sub
End Class

</script>

<html>
<head>
<link rel=3D"STYLESHEET" type=3D"text/css" href=3D"Forum.css">
</head>
<body>

<h1>Admin Page - Add a New Message</h1>

<form runat=3D"server" name=3D"form1" id=3D"form1">

<asp:DataGrid id=3D"dg" runat=3D"server"

AutoGenerateColumns=3D"False"
OnEditCommand=3D"dg_edit"
OnCancelCommand=3D"dg_cancel"
OnUpdateCommand=3D"dg_update"
OnItemDataBound=3D"dg_ItemDataBound"
>

<Columns>
<asp:editcommandcolumn HeaderText=3D"EDIT" edittext=3D"Edit" 
CancelText=3D"Cancel" UpdateText=3D"Save" HeaderText=3D"" />
</Columns>

</asp:dataGrid>

</form>
</body></html>




---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.338 / Virus Database: 189 - Release Date: 14.03.2002


Message #2 by "Jon Maz" <jonmaz@s...> on Wed, 27 Mar 2002 13:34:24
Hi All,

I solved the problem - it was quite simple in the end, simply that the 
event is Click, not OnClick.

I now have another problem (of course) - and would appreciate some help!  
It's posted up in this list under "Why can't I find the control?", at: 

http://p2p.wrox.com/view.asp?list=aspx_beginners&id=159686

Thanks,

JON

  Return to Index