|
 |
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
|
|
 |