Rendered Controls - Page 5
August 9, 2002
Perhaps the best way to understand the process of creating a
rendered custom server control is to see one. Example
6-4 shows a class written in Visual Basic .NET that implements a custom
navigation control with the same functionality as the Nav.ascx user
control discussed earlier in this chapter. Unlike the user control, which has
the linked pages and images hardcoded into the control itself, the custom
control in Example
6-4 gets this information from an XML file.
Example 6-4: NavBar.vb Imports Microsoft.VisualBasic
Imports System
Imports System.Data
Imports System.Drawing
Imports System.IO
Imports System.Text
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace aspnetian
Public Class NavBar
Inherits Panel
Private NavDS As DataSet
Private _showDividers As Boolean = True
Public Property ShowDividers( ) As Boolean
Get
Return _showDividers
End Get
Set
_showDividers = value
End Set
End Property
Sub NavBar_Load(sender As Object, e As EventArgs) Handles MyBase.Load
LoadData( )
End Sub
Protected Overrides Sub Render(Writer As HtmlTextWriter)
Dim NavDR As DataRow
Dim RowNum As Integer = 1
Dim SB As StringBuilder
MyBase.RenderBeginTag(Writer)
MyBase.RenderContents(Writer)
Writer.Write("<hr width='80%'>" & vbCrLf)
For Each NavDR In NavDS.Tables(0).Rows
SB = new StringBuilder( )
SB.Append(vbTab)
SB.Append("<a href=""")
SB.Append(NavDR("url"))
SB.Append(""" onmouseover=""")
SB.Append("img")
SB.Append(RowNum.ToString( ))
SB.Append(".src='")
SB.Append(NavDR("moimageUrl"))
SB.Append("';""")
SB.Append(" onmouseout=""")
SB.Append("img")
SB.Append(RowNum.ToString( ))
SB.Append(".src='")
SB.Append(NavDR("imageUrl"))
SB.Append("';""")
SB.Append(" target='")
SB.Append(NavDR("targetFrame"))
SB.Append("'>")
SB.Append(vbCrLf)
SB.Append(vbTab)
SB.Append(vbTab)
SB.Append("<img border='0' align='absMiddle' alt='")
SB.Append(NavDR("text"))
SB.Append("' src='")
SB.Append(NavDR("imageUrl"))
SB.Append("' id='")
SB.Append("img")
SB.Append(RowNum.ToString( ))
SB.Append("' name='")
SB.Append("img")
SB.Append(RowNum.ToString( ))
SB.Append("'></a>")
SB.Append(vbTab)
SB.Append("<a href=""")
SB.Append(NavDR("url"))
SB.Append(""" onmouseover=""")
SB.Append("img")
SB.Append(RowNum.ToString( ))
SB.Append(".src='")
SB.Append(NavDR("moimageUrl"))
SB.Append("';""")
SB.Append(" onmouseout=""")
SB.Append("img")
SB.Append(RowNum.ToString( ))
SB.Append(".src='")
SB.Append(NavDR("imageUrl"))
SB.Append("';""")
SB.Append(" target='")
SB.Append(NavDR("targetFrame"))
SB.Append("'>")
SB.Append(NavDR("text"))
SB.Append("</a>")
SB.Append(vbCrLf)
If _showDividers = True Then
SB.Append("<hr width='80%'>")
Else
SB.Append("<br/><br/>")
End If
SB.Append(vbCrLf)
Writer.Write(SB.ToString( ))
RowNum += 1
Next
MyBase.RenderEndTag(Writer)
End Sub
Protected Sub LoadData( )
NavDS = New DataSet( )
Try
NavDS.ReadXml(Page.Server.MapPath("NavBar.xml"))
Catch fnfEx As FileNotFoundException
CreateBlankFile( )
Dim Html As String
Html = "<br>No NavBar.xml file was found, so one was " & _
"created for you. Follow the directions in the file " & _
"to populate the required fields and, if desired, " & _
"the optional fields."
Me.Controls.Add(New LiteralControl(Html))
End Try
End Sub
Public Sub CreateBlankFile( )
'Code to create a blank XML file with the fields used by
' the control. This code is included as a part of the file
' NavBar.vb, included with the sample files for the book.
End Sub
End Class
End Namespace
Custom Server Controls - Page 4
ASP.NET in a Nutshell
Rendered Controls (Cont.) - Page 6
|