SQL Clone
SQLServerCentral is supported by Redgate
Log in  ::  Register  ::  Not logged in

Wiring up a common click event handler in an ASP.NET page

I was just refactoring a server-side control and ran into some horrible code.  Basicaly there was a big listbox that was supposed to hold people's names with letters A through Z to the left which were ASP.NET LinkButtons.  lnkBtnA, lnkBtnB, etc.  Each link button had its own click handler whose code only differed by the letter that would be used to filter the listbox.  Of course, since I needed to change how the filter worked, I would have had to make 26 edits to each of the subroutines.  Instead, I deleted them all and wrote the following:

Note: RegisterClickEvents() has to be called in the Page_Init event, as Page_Load is too late in the cycle.

Private Sub RegisterClickEvents()
 For Each objControl In Me.Controls
  If TypeOf objControl Is System.Web.UI.WebControls.LinkButton Then
   If InStr(DirectCast(objControl, System.Web.UI.WebControls.LinkButton).ID, "lnkBtn", CompareMethod.Text) > 0 Then
    AddHandler DirectCast(objControl, System.Web.UI.WebControls.LinkButton).Click, AddressOf FilterLinkButtonClick
   End If
  End If
End Sub

Protected Sub FilterLinkButtonClick(ByVal sender As Object, ByVal e As EventArgs)
 'Find the letter from the ID of the control that was clicked so we know what to filter by
 Dim strFilterLetter As String
 strFilterLetter = Replace(UCase(DirectCast(sender, System.Web.UI.WebControls.LinkButton).ID), "LNKBTN", "")
 '... other code to do the filtering on my listbox

End Sub

New York City .NET

The author of the NYCdotNet blog is a VB.NET and SQL server developer living and working in New York City. The author seeks to promote clean, readable, efficient code in both VB and SQL from design to development, deployment, and application maintenance.


No comments.

Leave a Comment

Please register or log in to leave a comment.