Bubbled events in dynamic web control

  • Thread starter Kasabaarde Sumta
  • Start date
K

Kasabaarde Sumta

I have created a navigation bar that is designed to cycle through the pages
of a datagrid. It is created at runtime in the ItemCreated event of the
datagrid and added to the control list of one of the cells in the datagrid
header. In theory, when I click on one of the imagebuttons the control
contains then the event is bubbled to the control and in turn handled in the
code behind of the page on which it resides. Instead when I click on the
control, I get "System.NullReferenceException: Object reference not set to an
instance of an object." on the CommandEvent(this, e); line in
NavBar_Command(below).

I have sucessfully used this technique on two previous controls, but those
both exist as tags upon the ASPX page. This one is created wholly in the
codebehind. Below are what I belive to be the relevant pieces of code. Any
suggestions would be appreciated.

'------VB ----- Code Behind for the page on which the control will appear
'----- Datagrid Item Created event --- add the NavBar to the first cell
dgCell = New TableCell
dgCell.ColumnSpan = 2
dgCell.HorizontalAlign = HorizontalAlign.Center
'---------------------'
portNavBar = New NavBar
portNavBar.CurrentPage = CurrentPage
portNavBar.PageCount = PageCount

dgCell.Controls.Add(portNavBar)
dgItem.Cells.Add(dgCell)


-------Handle the bubbled event
Public Sub navbar_command(ByVal sender As Object, ByVal e As
CommandEventArgs) Handles portNavBar.CommandEvent
If e.CommandName = "navigate" Then
Dim ceiling As Integer = Math.Ceiling(PageCount / 10)
If ceiling < 5 Then ceiling = 5

UpdatePage()
Select Case e.CommandArgument
Case "reverse"
CurrentPage -= 1
Case "fastreverse"
CurrentPage -= ceiling
Case "forward"
CurrentPage += 1
Case "fastforward"
CurrentPage += ceiling
End Select
BindData(False)
End If
xcpMessage = "here"
End Sub
-----------END Code Behind snippets----

// C# ----From the NavBar Object ---
public delegate void OnCommandEvent(object sender, CommandEventArgs e);
public event OnCommandEvent CommandEvent;

private void NavBar_Command(object sender, CommandEventArgs e)
{
CommandEvent(this, e);
}


public NavBar()
{
ImageButton fastReverse = new ImageButton();
ImageButton reverse = new ImageButton();
ImageButton pagebar = new ImageButton();
ImageButton forward = new ImageButton();
ImageButton fastForward = new ImageButton();

fastReverse.ImageUrl = "images/nav_start.gif";
reverse.ImageUrl = "images/nav_reverse.gif";
pagebar.ImageUrl = "images/nav_middle.gif";
forward.ImageUrl = "images/nav_forward.gif";
fastForward.ImageUrl = "images/nav_end.gif";

fastReverse.Command += new CommandEventHandler(NavBar_Command);
reverse.Command += new CommandEventHandler(NavBar_Command);
pagebar.Command += new CommandEventHandler(NavBar_Command);
forward.Command += new CommandEventHandler(NavBar_Command);
fastForward.Command += new CommandEventHandler(NavBar_Command);

fastReverse.CommandName = "navigate";
reverse.CommandName = "navigate";
pagebar.CommandName = "navigate";
forward.CommandName = "navigate";
fastForward.CommandName = "navigate";

fastReverse.CommandArgument = "fastreverse";
reverse.CommandArgument = "reverse";
pagebar.CommandArgument = "pagebar";
forward.CommandArgument = "forward";
fastForward.CommandArgument = "fastforward";

t.Rows.Add(tr);
t.CssClass="noborders";
TableCell tc = new TableCell();
tc.Controls.Add(fastReverse);
tc.CssClass = "noborders";
tr.Cells.Add(tc);

tc = new TableCell();
tc.Controls.Add(reverse);
tc.CssClass = "noborders";
tr.Cells.Add(tc);

pageMeter = new TableCell();
pageMeter.Attributes.Add("background","images/nav_middle.gif");
pageMeter.Width = Unit.Pixel(90);
pageMeter.HorizontalAlign = HorizontalAlign.Center;
pageMeter.Controls.Add(pagebar);
pageMeter.CssClass = "noborders";
tr.Cells.Add(pageMeter);

tc = new TableCell();
tc.Controls.Add(forward);
tc.CssClass = "noborders";
tr.Cells.Add(tc);

tc = new TableCell();
tc.Controls.Add(fastForward);
tc.CssClass = "noborders";
tr.Cells.Add(tc);
this.Controls.Add(t);
}
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,997
Messages
2,570,239
Members
46,827
Latest member
DMUK_Beginner

Latest Threads

Top