lambofgoth
New Member
Hi,<BR><BR>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:<BR><BR> Compiler Error Message: BC30390: 'System.Web.UI.WebControls.LinkButton.Protecte d Overridable Sub OnClick(e As System.EventArgs)' is Protected, and is not accessible in this context.<BR><BR><BR>The LinkButton is in a DataGrid, and I am adding the OnClick EventHandler in the DataGrid's OnItemDataBound subroutine:<BR><BR> Sub dg_ItemDataBound(sender As Object, e As DataGridItemEventArgs)<BR> If (e.Item.ItemType = ListItemType.EditItem) then<BR> Dim lbtToggleItemText as LinkButton = e.Item.FindControl("lbtToggleItemText")<BR> AddHandler lbtToggleItemText.OnClick, AddressOf ToggleViewItemTextDisplay <BR> end if<BR> End sub<BR><BR><BR>and the subroutine called looks like this:<BR><BR> sub ToggleViewItemTextDisplay(sender as object, e as EventArgs)<BR> Response.Write("just to show the onclick event has happened")<BR> end sub<BR><BR><BR>The full code is below (the LinkButton is actually in EditItemTemplate.ascx, which is dynamically loaded into an EditItemTemplate column at runtime).<BR><BR>Thanks for any help,<BR><BR>JON<BR><BR>++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++<BR>THE CODE - THE CODE - THE CODE - THE CODE - THE CODE - THE CODE - THE CODE - THE CODE<BR>++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++<BR><BR><BR><BR>**************************************<BR> EditItemTemplate.ascx<BR>**************************************<BR><BR><%@ Control Language="VB" %><BR><asp:LinkButton id="lbtToggleItemText" runat="server" Text="Toggle ItemText Display" /><BR><BR><BR><BR><BR><BR>**************************************<BR> DataGridPage.aspx<BR>**************************************<BR><BR><BR><%@ Page Language="VB" Debug="true" %><BR><%@ Import Namespace="System.Data" %><BR><%@ Import Namespace="System.Data.Oledb" %><BR><BR><script language="VB" runat="server"><BR><BR>Dim objConn as New OleDbConnection ( ConfigurationSettings.AppSettings("ConnectionString") )<BR>Dim ds as Dataset = New DataSet() <BR>Dim objAdapter as New OleDbDataAdapter ( "SELECT * from tblItems", objConn )<BR><BR>Sub Page_Load(sender as object, e as eventargs)<BR><BR> objConn.Open()<BR> objAdapter.Fill(ds, "tblItems")<BR> dg.DataSource = ds<BR> dg.DataMember = "tblItems"<BR> <BR> Dim tc1 As New TemplateColumn()<BR> tc1.HeaderTemplate = New DataGridTemplate(ListItemType.Header, "Column1")<BR> tc1.ItemTemplate = New DataGridTemplate(ListItemType.Item, "Column1")<BR> '*********************************<BR> '*** ADD ASCX FILE AS TEMPLATE ***<BR> '*********************************<BR> tc1.EditItemTemplate = Page.LoadTemplate("EditItemTemplate.ascx")<BR> tc1.FooterTemplate = New DataGridTemplate(ListItemType.Footer, "Column1")<BR> dg.Columns.Add(tc1)<BR> <BR> If Not Page.IsPostBack Then<BR> dg.Databind()<BR> End If<BR><BR>End Sub<BR><BR><BR>sub dg_edit(sender as object, e as DataGridCommandEventArgs)<BR> dg.edititemindex = e.item.itemindex<BR> dg.databind()<BR>end sub<BR><BR><BR>sub dg_cancel(sender as object, e as DataGridCommandEventArgs)<BR> dg.edititemindex = -1<BR> dg.databind()<BR>end sub<BR><BR><BR>sub dg_update(sender as object, e as DataGridCommandEventArgs) <BR> 'Put an update function here<BR>end sub<BR><BR><BR>Sub dg_ItemDataBound(sender As Object, e As DataGridItemEventArgs)<BR><BR> If (e.Item.ItemType = ListItemType.EditItem) then<BR> <BR> Dim lbtToggleItemText as LinkButton = e.Item.FindControl("lbtToggleItemText")<BR> AddHandler lbtToggleItemText.OnClick, AddressOf ToggleViewItemTextDisplay<BR> '*********************************<BR> 'WHY DOESN'T THIS WORK???????<BR> '*********************************<BR> <BR> end if<BR><BR>End sub<BR><BR><BR>sub ToggleViewItemTextDisplay(sender as object, e as EventArgs)<BR> Response.Write("just to show the onclick event has happened")<BR>end sub<BR><BR>Private Class DataGridTemplate<BR> Implements ITemplate<BR> Dim templateType As ListItemType<BR> Dim columnName As String<BR> Sub New(ByVal type As ListItemType, ByVal ColName As String)<BR> templateType = type<BR> columnName = ColName<BR> End Sub<BR> Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn<BR> Dim lc As New Literal()<BR> Select Case templateType<BR> Case ListItemType.Header<BR> lc.Text = "<I><b>Header</b></I>"<BR> container.Controls.Add(lc)<BR> Case ListItemType.Item<BR> lc.Text = "Item " & columnName<BR> container.Controls.Add(lc)<BR> Case ListItemType.EditItem <BR> '*** This is taken care of with the LoadTemplate method above<BR> Case ListItemType.Footer<BR> lc.Text = "<I><b>Footer</b></I>"<BR> container.Controls.Add(lc)<BR> End Select<BR> End Sub<BR>End Class<BR><BR></script> <BR><BR><html><BR><head><BR><link rel="STYLESHEET" type="text/css" href=http://aspmessageboard.com/archive/index.php/"Forum.css"><BR></head><BR><body><BR><BR><h1>Admin Page - Add a New Message</h1><BR><BR><form runat="server" name="form1" id="form1"><BR><BR><asp
ataGrid id="dg" runat="server"<BR><BR>AutoGenerateColumns="False" <BR>OnEditCommand="dg_edit"<BR>OnCancelCommand="dg_cancel"<BR>OnUpdateCommand="dg_update"<BR>OnItemDataBound="dg_ItemDataBound"<BR>><BR><BR><Columns><BR><asp:editcommandcolumn HeaderText="EDIT" edittext="Edit" CancelText="Cancel" UpdateText="Save" HeaderText="" /><BR></Columns><BR><BR></asp:dataGrid><BR><BR></form> <BR></body></html><BR>I've had an answer already (!) to this question - the event is called Click, not OnClick (OnClick is the protected implementation code.)<BR><BR>JON<BR>I've had an answer already (!) to this question - the event is called Click, not OnClick (OnClick is the protected implementation code.)<BR><BR>JON<BR>I've had an answer already (!) to this question - the event is called Click, not OnClick (OnClick is the protected implementation code.)<BR><BR>JON<BR>
