Wednesday, August 31, 2005
Accessing user controls from code behind
Add a place holder in user control, and make it public in code-behind
In application pages, code-behind declare an object of type user control
' user control used to add links
Dim pageMyControl As MyUserControl
Dim lnkNewLink As WebControls.LinkButton
Dim newLinkButtonIndex as Int32
' get the user control
pageMyControl = DirectCast(FindControl("ucMyControl"), MyUserControl)
If Not pageMyControl Is Nothing Then
lnkNewLink = New WebControls.LinkButton
lnkNewLink.Text = " [NewLink] "
lnkNewLink.ID = "lnkNewLink"
lnkNewLink.CausesValidation = False
' Add event handler to the link button,
' this function has to be written in page code-behind
AddHandler lnkNewLink.Click, AddressOf ControlNewLink
' Add the link button to user control
pageMyControl.phLinks.Controls.Add(lnkNewLink)
' if incase you want to show/hide the link button based on certain condition
' or change properties of the link button based on codition,
' the index is required
newLinkButtonIndex = pageMyControl.phLinks.Controls.IndexOf(lnkNewLink)
' heres an example to set visible property to false
pageMyControl.phLinks.Controls(newLinkButtonIndex).Visible = False
End If
Custom text box
Imports System.ComponentModel
Imports System.Web.UI
Imports System.Web.UI.WebControls
<DefaultProperty("Text"), ToolboxData("<{0}:TextBox runat=server></{0}:TextBox>")> _
Public Class TextBox
Inherits System.Web.UI.WebControls.TextBox
#Region "Private/Public/Shared variables"
' private variables
Private _text As String = String.Empty
' reg ex validator properties
Private _textType As ENums.TextType
Private _typeText As String = String.Empty
Private _typeDisplay As ValidatorDisplay = ValidatorDisplay.None
Private _typeVisible As Boolean = True
Private _typeEnabled As Boolean = True
Private _typeEnableClientScript As Boolean = True
Private _typeEnableViewState As Boolean
Private _typeCssClass As String = String.Empty
Private _typeErrorMessage As String = " Is Invalid"
Private _typeSpecialChars As String = String.Empty
'required field validator properties
Private _isRequired As Boolean
Private _requiredErrorMessage As String = " Is Required"
Private _requiredText As String = " *"
Private _requiredDisplay As ValidatorDisplay = ValidatorDisplay.Static
Private _requiredVisible As Boolean = True
Private _requiredEnabled As Boolean = True
Private _requiredEnableClientScript As Boolean = True
Private _requiredEnableViewState As Boolean
Private _requiredCssClass As String = String.Empty
Private _requiredShowTextAlways As Boolean = True
' private controls
Private requiredValidate As RequiredFieldValidator
Private regExpValidate As RegularExpressionValidator
#End Region
#Region "Properties"
#Region "Property Overrides"
<Bindable(True), Category("Appearance"), DefaultValue("")> _
Public Overrides Property [Text]() As String
Get
Return _text
End Get
Set(ByVal Value As String)
_text = Value
End Set
End Property
#End Region
#Region "Custom properties"
<Bindable(True), Category("Validate"), DefaultValue(" Is Required")> _
Public Property RequiredErrorMessage() As String
Get
If Me.EnableViewState Then
If Not ViewState("RequiredErrorMessage") Is Nothing Then
Return Convert.ToString(ViewState("RequiredErrorMessage"))
Else
Return _requiredErrorMessage
End If
Else
Return _requiredErrorMessage
End If
End Get
Set(ByVal Value As String)
Try
_requiredErrorMessage = Value
If Me.EnableViewState Then
ViewState("RequiredErrorMessage") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.ErrorMessage = Value
End If
Catch
_requiredErrorMessage = String.Empty
If Me.EnableViewState Then
ViewState("RequiredErrorMessage") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(False)> _
Public Property IsRequired() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("IsRequired") Is Nothing Then
Return Convert.ToBoolean(ViewState("IsRequired"))
Else
Return _isRequired
End If
Else
Return _isRequired
End If
End Get
Set(ByVal Value As Boolean)
Try
_isRequired = Value
If Me.EnableViewState Then
ViewState("IsRequired") = Value
End If
If Value Then
If requiredValidate Is Nothing Then
requiredValidate = New RequiredFieldValidator
requiredValidate.ControlToValidate = Me.ClientID
requiredValidate.Display = _requiredDisplay
requiredValidate.ErrorMessage = RequiredErrorMessage
requiredValidate.Text = _requiredText
requiredValidate.EnableClientScript = _requiredEnableClientScript
requiredValidate.Enabled = _requiredEnabled
requiredValidate.Visible = _requiredVisible
requiredValidate.EnableViewState = _requiredEnableViewState
requiredValidate.CssClass = _requiredCssClass
Me.Controls.Add(requiredValidate)
End If
Else
If Not requiredValidate Is Nothing Then
Me.Controls.Remove(requiredValidate)
requiredValidate = Nothing
End If
End If
Catch
_isRequired = False
If Me.EnableViewState Then
ViewState("IsRequired") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(" *")> _
Public Property RequiredText() As String
Get
If Me.EnableViewState Then
If Not ViewState("RequiredText") Is Nothing Then
Return Convert.ToString(ViewState("RequiredText"))
Else
Return _requiredText
End If
Else
Return _requiredText
End If
End Get
Set(ByVal Value As String)
Try
_requiredText = Value
If Me.EnableViewState Then
ViewState("RequiredText") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Text = _requiredText
End If
Catch
_requiredText = String.Empty
If Me.EnableViewState Then
ViewState("RequiredText") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredShowTextAlways() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredShowTextAlways") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredShowTextAlways"))
Else
Return _requiredShowTextAlways
End If
Else
Return _requiredShowTextAlways
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredShowTextAlways = Value
If Me.EnableViewState Then
ViewState("RequiredShowTextAlways") = Value
End If
Catch
_requiredShowTextAlways = True
If Me.EnableViewState Then
ViewState("RequiredShowTextAlways") = True
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(ValidatorDisplay.Static)> _
Public Property RequiredDisplay() As ValidatorDisplay
Get
If Me.EnableViewState Then
If Not ViewState("RequiredDisplay") Is Nothing Then
Return CType(ViewState("RequiredDisplay"), ValidatorDisplay)
Else
Return _requiredDisplay
End If
Else
Return _requiredDisplay
End If
End Get
Set(ByVal Value As ValidatorDisplay)
Try
_requiredDisplay = Value
If Me.EnableViewState Then
ViewState("RequiredDisplay") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Display = Value
End If
Catch
_requiredDisplay = ValidatorDisplay.None
If Me.EnableViewState Then
ViewState("RequiredDisplay") = ValidatorDisplay.None
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredVisible() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredVisible") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredVisible"))
Else
Return _requiredVisible
End If
Else
Return _requiredVisible
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredVisible = Value
If Me.EnableViewState Then
ViewState("RequiredVisible") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Visible = _requiredVisible
End If
Catch
_requiredVisible = False
If Me.EnableViewState Then
ViewState("RequiredVisible") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredEnabled() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredEnabled") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredEnabled"))
Else
Return _requiredEnabled
End If
Else
Return _requiredEnabled
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredEnabled = Value
If Me.EnableViewState Then
ViewState("RequiredEnabled") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Enabled = _requiredEnabled
End If
Catch
_requiredEnabled = False
If Me.EnableViewState Then
ViewState("RequiredEnabled") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredEnableClientScript() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredEnableClientScript") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredEnableClientScript"))
Else
Return _requiredEnableClientScript
End If
Else
Return _requiredEnableClientScript
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredEnableClientScript = Value
If Me.EnableViewState Then
ViewState("RequiredEnableClientScript") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.EnableClientScript = _requiredEnableClientScript
End If
Catch
_requiredEnableClientScript = False
If Me.EnableViewState Then
ViewState("RequiredEnableClientScript") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(False)> _
Public Property RequiredEnableViewState() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredEnableViewState") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredEnableViewState"))
Else
Return _requiredEnableViewState
End If
Else
Return _requiredEnableViewState
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredEnableViewState = Value
If Me.EnableViewState Then
ViewState("RequiredEnableViewState") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.EnableViewState = _requiredEnableViewState
End If
Catch
_requiredEnableViewState = False
If Me.EnableViewState Then
ViewState("RequiredEnableViewState") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue("")> _
Public Property RequiredCSSClass() As String
Get
If Me.EnableViewState Then
If Not ViewState("RequiredCssClass") Is Nothing Then
Return Convert.ToString(ViewState("RequiredCssClass"))
Else
Return _requiredCssClass
End If
Else
Return _requiredCssClass
End If
End Get
Set(ByVal Value As String)
Try
_requiredCssClass = Value
If Me.EnableViewState Then
ViewState("RequiredCssClass") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.CssClass = _requiredCssClass
End If
Catch
_requiredCssClass = String.Empty
If Me.EnableViewState Then
ViewState("RequiredCssClass") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(ValidatorDisplay.Static)> _
Public Property TypeDisplay() As ValidatorDisplay
Get
If Me.EnableViewState Then
If Not ViewState("TypeDisplay") Is Nothing Then
Return CType(ViewState("TypeDisplay"), ValidatorDisplay)
Else
Return _typeDisplay
End If
Else
Return _typeDisplay
End If
End Get
Set(ByVal Value As ValidatorDisplay)
Try
_typeDisplay = Value
If Me.EnableViewState Then
ViewState("TypeDisplay") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.Display = _typeDisplay
End If
Catch
_typeDisplay = ValidatorDisplay.None
If Me.EnableViewState Then
ViewState("TypeDisplay") = ValidatorDisplay.None
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property TypeVisible() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("TypeVisible") Is Nothing Then
Return Convert.ToBoolean(ViewState("TypeVisible"))
Else
Return _typeVisible
End If
Else
Return _typeVisible
End If
End Get
Set(ByVal Value As Boolean)
Try
_typeVisible = Value
If Me.EnableViewState Then
ViewState("TypeVisible") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.Visible = _typeVisible
End If
Catch
_typeVisible = False
If Me.EnableViewState Then
ViewState("TypeVisible") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property TypeEnabled() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("TypeEnabled") Is Nothing Then
Return Convert.ToBoolean(ViewState("TypeEnabled"))
Else
Return _typeEnabled
End If
Else
Return _typeEnabled
End If
End Get
Set(ByVal Value As Boolean)
Try
_typeEnabled = Value
If Me.EnableViewState Then
ViewState("TypeEnabled") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.Enabled = _typeEnabled
End If
Catch
_typeEnabled = False
If Me.EnableViewState Then
ViewState("TypeEnabled") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property TypeEnableClientScript() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("TypeEnableClientScript") Is Nothing Then
Return Convert.ToBoolean(ViewState("TypeEnableClientScript"))
Else
Return _typeEnableClientScript
End If
Else
Return _typeEnableClientScript
End If
End Get
Set(ByVal Value As Boolean)
Try
_typeEnableClientScript = Value
If Me.EnableViewState Then
ViewState("TypeEnableClientScript") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.EnableClientScript = _typeEnableClientScript
End If
Catch
_typeEnableClientScript = False
If Me.EnableViewState Then
ViewState("TypeEnableClientScript") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(False)> _
Public Property TypeEnableViewState() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("TypeEnableViewState") Is Nothing Then
Return Convert.ToBoolean(ViewState("TypeEnableViewState"))
Else
Return _typeEnableViewState
End If
Else
Return _typeEnableViewState
End If
End Get
Set(ByVal Value As Boolean)
Try
_typeEnableViewState = Value
If Me.EnableViewState Then
ViewState("TypeEnableViewState") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.EnableViewState = _typeEnableViewState
End If
Catch
_typeEnableViewState = False
If Me.EnableViewState Then
ViewState("TypeEnableViewState") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue("")> _
Public Property TypeCssClass() As String
Get
If Me.EnableViewState Then
If Not ViewState("TypeCssClass") Is Nothing Then
Return Convert.ToString(ViewState("TypeCssClass"))
Else
Return _typeCssClass
End If
Else
Return _typeCssClass
End If
End Get
Set(ByVal Value As String)
Try
_typeCssClass = Value
If Me.EnableViewState Then
ViewState("TypeCssClass") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.CssClass = _typeCssClass
End If
Catch
_typeCssClass = String.Empty
If Me.EnableViewState Then
ViewState("TypeCssClass") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue("")> _
Public Property TypeSpecialChars() As String
Get
If Me.EnableViewState Then
If Not ViewState("TypeSpecialChars") Is Nothing Then
Return Convert.ToString(ViewState("TypeSpecialChars"))
Else
Return _typeSpecialChars
End If
Else
Return _typeSpecialChars
End If
End Get
Set(ByVal Value As String)
Try
_typeSpecialChars = Value
If Me.EnableViewState Then
ViewState("TypeSpecialChars") = Value
End If
If Not regExpValidate Is Nothing Then
If _textType = ENums.TextType.AlphanumericSpecialChars Then
regExpValidate.ValidationExpression = "[a-zA-Z0-9" & _typeSpecialChars & "]*"
End If
End If
Catch
_typeSpecialChars = String.Empty
If Me.EnableViewState Then
ViewState("TypeSpecialChars") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(" Is Invalid")> _
Public Property TypeErrorMessage() As String
Get
If Me.EnableViewState Then
If Not ViewState("TypeErrorMessage") Is Nothing Then
Return Convert.ToString(ViewState("TypeErrorMessage"))
Else
Return _typeErrorMessage
End If
Else
Return _typeErrorMessage
End If
End Get
Set(ByVal Value As String)
Try
_typeErrorMessage = Value
If Me.EnableViewState Then
ViewState("TypeErrorMessage") = Value
End If
If Not regExpValidate Is Nothing Then
regExpValidate.ErrorMessage = _typeErrorMessage
End If
Catch
_typeErrorMessage = String.Empty
If Me.EnableViewState Then
ViewState("TypeErrorMessage") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(ENums.TextType.All)> _
Public Property TextType() As ENums.TextType
Get
If Me.EnableViewState Then
If Not ViewState("TextType") Is Nothing Then
Return CType(ViewState("TextType"), ENums.TextType)
Else
Return _textType
End If
Else
Return _textType
End If
End Get
Set(ByVal Value As ENums.TextType)
Try
_textType = Value
If Me.EnableViewState Then
ViewState("TextType") = Value
End If
SetRegEx(Value)
Catch
_textType = ENums.TextType.All
If Me.EnableViewState Then
ViewState("TextType") = ENums.TextType.All
End If
End Try
End Set
End Property
#End Region
#End Region
#Region "Methods/Functions/Sub"
Private Sub SetRegEx(ByVal Value As ENums.TextType)
If Value <> ENums.TextType.All Then
If regExpValidate Is Nothing Then
regExpValidate = New RegularExpressionValidator
regExpValidate.ControlToValidate = Me.ClientID
Me.Controls.Add(regExpValidate)
End If
regExpValidate.CssClass = _typeCssClass
regExpValidate.Display = _typeDisplay
regExpValidate.EnableClientScript = _typeEnableClientScript
regExpValidate.Enabled = _typeEnabled
regExpValidate.EnableViewState = _typeEnableViewState
regExpValidate.ErrorMessage = _typeErrorMessage
regExpValidate.Text = _typeText
Select Case Value
Case ENums.TextType.Alphabhets
regExpValidate.ValidationExpression = "[a-zA-Z]*"
Case ENums.TextType.Alphanumeric
regExpValidate.ValidationExpression = "[a-zA-Z0-9]*"
Case ENums.TextType.AlphanumericSpecialChars
regExpValidate.ValidationExpression = "[a-zA-Z0-9" & _typeSpecialChars & "]*"
Case ENums.TextType.Decimals
regExpValidate.ValidationExpression = "\d*\.{0,1}\d+"
Case ENums.TextType.Email
regExpValidate.ValidationExpression = "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
Case ENums.TextType.Numeric
regExpValidate.ValidationExpression = "\d*"
Case Else
Me.Controls.Remove(regExpValidate)
regExpValidate = Nothing
End Select
Else
If Not regExpValidate Is Nothing Then
Me.Controls.Remove(regExpValidate)
regExpValidate = Nothing
End If
End If
End Sub
#End Region
#Region "Overrides"
Protected Overrides Sub OnInit(ByVal e As EventArgs)
MyBase.OnInit(e)
End Sub
Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
If Me.ReadOnly Then
_isRequired = False
_textType = ENums.TextType.All
If Not requiredValidate Is Nothing Then
Me.Controls.Remove(requiredValidate)
requiredValidate = Nothing
End If
If Not regExpValidate Is Nothing Then
Me.Controls.Remove(regExpValidate)
regExpValidate = Nothing
End If
' to make it look like a label
Me.BorderWidth = WebControls.Unit.Pixel(0)
MyBase.Render(output)
'output.Write("<span id=""" & Me.ClientID & """>" & Me.Text & "</span>")
Else
MyBase.Render(output)
If Not requiredValidate Is Nothing Then
If Me._requiredShowTextAlways Then
If Me._requiredCssClass.Length > 0 Then
output.Write(HtmlTextWriter.SpaceChar)
output.Write("<span class=""" & Me._requiredCssClass & """>" & Me._requiredText & "</span>")
Else
output.Write(HtmlTextWriter.SpaceChar)
output.Write("<span style=""color:Red"">" & Me._requiredText & "</span>")
End If
requiredValidate.Text = String.Empty
requiredValidate.Display = ValidatorDisplay.None
End If
If String.Compare(requiredValidate.ControlToValidate, String.Empty, False) = 0 Then
requiredValidate.ControlToValidate = Me.ClientID
End If
requiredValidate.RenderControl(output)
End If
If Not regExpValidate Is Nothing Then
If String.Compare(regExpValidate.ControlToValidate, String.Empty, False) = 0 Then
regExpValidate.ControlToValidate = Me.ClientID
End If
regExpValidate.RenderControl(output)
End If
End If
End Sub
Protected Overrides Sub AddAttributesToRender(ByVal writer As System.Web.UI.HtmlTextWriter)
MyBase.AddAttributesToRender(writer)
' this is added to trim values in text areas to max length
If Me.MaxLength > 0 And Me.TextMode = TextBoxMode.MultiLine Then
writer.AddAttribute("onblur", _
"this.value = this.value.slice(0," & Me.MaxLength & ");")
End If
End Sub
Protected Overrides Sub LoadViewState(ByVal savedState As Object)
If Not savedState Is Nothing Then
MyBase.LoadViewState(savedState)
Me.IsRequired = Me.IsRequired
End If
End Sub
#End Region
End Class
Public Class ENums
Public Enum TextType
All
Alphabhets
Alphanumeric
AlphanumericSpecialChars
Numeric
Decimals
End Enum
End Class
Custom drop down list
Imports System.ComponentModel
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Text
<DefaultProperty("DataSource"), ToolboxData("<{0}:DropDownList runat=server></{0}:DropDownList>")> _
Public Class DropDownList
Inherits System.Web.UI.WebControls.DropDownList
#Region "Private/Shared variables"
'required field validator properties
Private _isRequired As Boolean
Private _requiredErrorMessage As String = " Is Required"
Private _requiredText As String = " *"
Private _requiredDisplay As ValidatorDisplay = ValidatorDisplay.Static
Private _requiredVisible As Boolean = True
Private _requiredEnabled As Boolean = True
Private _requiredEnableClientScript As Boolean = True
Private _requiredEnableViewState As Boolean
Private _requiredCssClass As String = String.Empty
Private _requiredShowTextAlways As Boolean = True
' private controls
Private requiredValidate As RequiredFieldValidator
' private variables for key press function
Private Shared functionName As String = "DropDownList_onkeypress"
Private _caseSensitiveKey As Boolean = False
#End Region
#Region "Properties"
#Region "Property overrides"
<Bindable(True), Category("KeyPress"), DefaultValue(False)> _
Public Overridable Property CaseSensitiveKey() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("CaseSensitiveKey") Is Nothing Then
Return Convert.ToBoolean(ViewState("CaseSensitiveKey"))
Else
Return _caseSensitiveKey
End If
Else
Return _caseSensitiveKey
End If
End Get
Set(ByVal Value As Boolean)
_caseSensitiveKey = Value
If Me.EnableViewState Then
ViewState("CaseSensitiveKey") = Value
End If
End Set
End Property
#End Region
#Region "Custom properties"
<Bindable(True), Category("Validate"), DefaultValue(" Is Required")> _
Public Property RequiredErrorMessage() As String
Get
If Me.EnableViewState Then
If Not ViewState("RequiredErrorMessage") Is Nothing Then
Return Convert.ToString(ViewState("RequiredErrorMessage"))
Else
Return _requiredErrorMessage
End If
Else
Return _requiredErrorMessage
End If
End Get
Set(ByVal Value As String)
Try
_requiredErrorMessage = Value
If Me.EnableViewState Then
ViewState("RequiredErrorMessage") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.ErrorMessage = Value
End If
Catch
_requiredErrorMessage = String.Empty
If Me.EnableViewState Then
ViewState("RequiredErrorMessage") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(False)> _
Public Property IsRequired() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("IsRequired") Is Nothing Then
Return Convert.ToBoolean(ViewState("IsRequired"))
Else
Return _isRequired
End If
Else
Return _isRequired
End If
End Get
Set(ByVal Value As Boolean)
Try
_isRequired = Value
If Me.EnableViewState Then
ViewState("IsRequired") = Value
End If
If Value Then
If requiredValidate Is Nothing Then
requiredValidate = New RequiredFieldValidator
requiredValidate.ControlToValidate = Me.UniqueID
requiredValidate.Display = _requiredDisplay
requiredValidate.ErrorMessage = RequiredErrorMessage
requiredValidate.Text = _requiredText
requiredValidate.EnableClientScript = _requiredEnableClientScript
requiredValidate.Enabled = _requiredEnabled
requiredValidate.Visible = _requiredVisible
requiredValidate.EnableViewState = _requiredEnableViewState
requiredValidate.CssClass = _requiredCssClass
Me.Controls.Add(requiredValidate)
End If
Else
If Not requiredValidate Is Nothing Then
Me.Controls.Remove(requiredValidate)
requiredValidate = Nothing
End If
End If
Catch
_isRequired = False
If Me.EnableViewState Then
ViewState("IsRequired") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(" *")> _
Public Property RequiredText() As String
Get
If Me.EnableViewState Then
If Not ViewState("RequiredText") Is Nothing Then
Return Convert.ToString(ViewState("RequiredText"))
Else
Return _requiredText
End If
Else
Return _requiredText
End If
End Get
Set(ByVal Value As String)
Try
_requiredText = Value
If Me.EnableViewState Then
ViewState("RequiredText") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Text = _requiredText
End If
Catch
_requiredText = String.Empty
If Me.EnableViewState Then
ViewState("RequiredText") = String.Empty
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredShowTextAlways() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredShowTextAlways") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredShowTextAlways"))
Else
Return _requiredShowTextAlways
End If
Else
Return _requiredShowTextAlways
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredShowTextAlways = Value
If Me.EnableViewState Then
ViewState("RequiredShowTextAlways") = Value
End If
Catch
_requiredShowTextAlways = True
If Me.EnableViewState Then
ViewState("RequiredShowTextAlways") = True
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(ValidatorDisplay.Static)> _
Public Property RequiredDisplay() As ValidatorDisplay
Get
If Me.EnableViewState Then
If Not ViewState("RequiredDisplay") Is Nothing Then
Return CType(ViewState("RequiredDisplay"), ValidatorDisplay)
Else
Return _requiredDisplay
End If
Else
Return _requiredDisplay
End If
End Get
Set(ByVal Value As ValidatorDisplay)
Try
_requiredDisplay = Value
If Me.EnableViewState Then
ViewState("RequiredDisplay") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Display = Value
End If
Catch
_requiredDisplay = ValidatorDisplay.None
If Me.EnableViewState Then
ViewState("RequiredDisplay") = ValidatorDisplay.None
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredVisible() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredVisible") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredVisible"))
Else
Return _requiredVisible
End If
Else
Return _requiredVisible
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredVisible = Value
If Me.EnableViewState Then
ViewState("RequiredVisible") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Visible = _requiredVisible
End If
Catch
_requiredVisible = False
If Me.EnableViewState Then
ViewState("RequiredVisible") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredEnabled() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredEnabled") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredEnabled"))
Else
Return _requiredEnabled
End If
Else
Return _requiredEnabled
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredEnabled = Value
If Me.EnableViewState Then
ViewState("RequiredEnabled") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.Enabled = _requiredEnabled
End If
Catch
_requiredEnabled = False
If Me.EnableViewState Then
ViewState("RequiredEnabled") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(True)> _
Public Property RequiredEnableClientScript() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredEnableClientScript") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredEnableClientScript"))
Else
Return _requiredEnableClientScript
End If
Else
Return _requiredEnableClientScript
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredEnableClientScript = Value
If Me.EnableViewState Then
ViewState("RequiredEnableClientScript") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.EnableClientScript = _requiredEnableClientScript
End If
Catch
_requiredEnableClientScript = False
If Me.EnableViewState Then
ViewState("RequiredEnableClientScript") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue(False)> _
Public Property RequiredEnableViewState() As Boolean
Get
If Me.EnableViewState Then
If Not ViewState("RequiredEnableViewState") Is Nothing Then
Return Convert.ToBoolean(ViewState("RequiredEnableViewState"))
Else
Return _requiredEnableViewState
End If
Else
Return _requiredEnableViewState
End If
End Get
Set(ByVal Value As Boolean)
Try
_requiredEnableViewState = Value
If Me.EnableViewState Then
ViewState("RequiredEnableViewState") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.EnableViewState = _requiredEnableViewState
End If
Catch
_requiredEnableViewState = False
If Me.EnableViewState Then
ViewState("RequiredEnableViewState") = False
End If
End Try
End Set
End Property
<Bindable(True), Category("Validate"), DefaultValue("")> _
Public Property RequiredCSSClass() As String
Get
If Me.EnableViewState Then
If Not ViewState("RequiredCssClass") Is Nothing Then
Return Convert.ToString(ViewState("RequiredCssClass"))
Else
Return _requiredCssClass
End If
Else
Return _requiredCssClass
End If
End Get
Set(ByVal Value As String)
Try
_requiredCssClass = Value
If Me.EnableViewState Then
ViewState("RequiredCssClass") = Value
End If
If Not requiredValidate Is Nothing Then
requiredValidate.CssClass = _requiredCssClass
End If
Catch
_requiredCssClass = String.Empty
If Me.EnableViewState Then
ViewState("RequiredCssClass") = String.Empty
End If
End Try
End Set
End Property
#End Region
#End Region
#Region "Overrides"
Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
If Not Me.Enabled Then
Me.BorderWidth = WebControls.Unit.Pixel(0)
End If
MyBase.Render(output)
If Not requiredValidate Is Nothing Then
If Me._requiredShowTextAlways Then
If Me._requiredCssClass.Length > 0 Then
output.Write(HtmlTextWriter.SpaceChar)
output.Write("<span class=""" & Me._requiredCssClass & """>" & Me._requiredText & "</span>")
Else
output.Write(HtmlTextWriter.SpaceChar)
output.Write("<span style=""color:Red"">" & Me._requiredText & "</span>")
End If
requiredValidate.Text = String.Empty
requiredValidate.Display = ValidatorDisplay.None
End If
requiredValidate.RenderControl(output)
End If
End Sub
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e) ' call the base class method
' define the client-side script
Dim script As StringBuilder = New StringBuilder(500)
script.Append("<script language=" & Chr(34) & "javascript" & Chr(34) & " " & vbCrLf)
script.Append("type=" & Chr(34) & "text/javascript" & Chr(34) & ">" & vbCrLf)
script.Append("function " & functionName & " (dropdownlist,caseSensitive) {" & vbCrLf)
script.Append(" // check the keypressBuffer attribute is defined on the dropdownlist" & vbCrLf)
script.Append(" var undefined; " & vbCrLf)
script.Append(" if (dropdownlist.keypressBuffer == undefined) { " & vbCrLf)
script.Append(" dropdownlist.keypressBuffer = ''; " & vbCrLf)
script.Append(" } " & vbCrLf)
script.Append(" // get the key that was pressed " & vbCrLf)
script.Append(" var key = String.fromCharCode(window.event.keyCode); " & vbCrLf)
script.Append(" dropdownlist.keypressBuffer += key;" & vbCrLf)
script.Append(" if (!caseSensitive) {" & vbCrLf)
script.Append(" // convert buffer to lowercase" & vbCrLf)
script.Append(" dropdownlist.keypressBuffer = dropdownlist.keypressBuffer.toLowerCase();" & vbCrLf)
script.Append(" }" & vbCrLf)
script.Append(" // find if it is the start of any of the options " & vbCrLf)
script.Append(" var optionsLength = dropdownlist.options.length; " & vbCrLf)
script.Append(" for (var n=0; n < optionsLength; n++) { " & vbCrLf)
script.Append(" var optionText = dropdownlist.options[n].text; " & vbCrLf)
script.Append(" if (!caseSensitive) {" & vbCrLf)
script.Append(" optionText = optionText.toLowerCase();" & vbCrLf)
script.Append(" }" & vbCrLf)
script.Append(" if (optionText.indexOf(dropdownlist.keypressBuffer,0) == 0) { " & vbCrLf)
script.Append(" dropdownlist.selectedIndex = n; " & vbCrLf)
script.Append(" return false; // cancel the default behavior since " & vbCrLf)
script.Append(" // we have selected our own value " & vbCrLf)
script.Append(" } " & vbCrLf)
script.Append(" } " & vbCrLf)
script.Append(" // reset initial key to be inline with default behavior " & vbCrLf)
script.Append(" dropdownlist.keypressBuffer = key; " & vbCrLf)
script.Append(" return true; // give default behavior " & vbCrLf)
script.Append("} " & vbCrLf)
script.Append("</script>")
' register the client-side script block
Me.Page.RegisterClientScriptBlock(functionName, script.ToString())
' add to the onkeypress event
Me.Attributes.Add("onkeypress", "return " + functionName + "(this," + _caseSensitiveKey.ToString().ToLower() + ")")
End Sub
Protected Overrides Function CreateControlCollection() As System.Web.UI.ControlCollection
Return New ControlCollection(Me)
End Function
Protected Overrides Sub LoadViewState(ByVal savedState As Object)
If Not savedState Is Nothing Then
MyBase.LoadViewState(savedState)
Me.IsRequired = Me.IsRequired
End If
End Sub
#End Region
End Class
Send mail using SMTP
can be called from the application with parameters to send email.
SMTP Server IP could be stored in web.config or database, so that
it can be changed easily.
Imports System.Web.Mail ' namespace is required for smtp mail
Public Shared Function SendMail(ByVal fromAddress As String, _
ByVal toAddress As String, ByVal ccAddress As String, _
ByVal bccAddress As String, ByVal msgSubject As String, _
ByVal msgBody As String, ByVal smtpServer As String, _
Optional ByVal msgPriority As Int32 = 0, _
Optional ByVal msgFormat As Int32 = 0) As Boolean
Dim mailMsg As MailMessage
Try
mailMsg = New MailMessage
mailMsg.From = ConvertToString(fromAddress)
mailMsg.To = ConvertToString(toAddress)
If ConvertToString(ccAddress).Length > 0 Then mailMsg.Cc = ccAddress
If ConvertToString(bccAddress).Length > 0 Then mailMsg.Bcc = bccAddress
mailMsg.Subject = ConvertToString(msgSubject)
mailMsg.Body = ConvertToString(msgBody)
If msgPriority < priority =" MailPriority.Low"> 0 Then
mailMsg.Priority = MailPriority.High
Else
mailMsg.Priority = MailPriority.Normal
End If
If msgFormat > 0 Then
mailMsg.BodyFormat = MailFormat.Html
Else
mailMsg.BodyFormat = MailFormat.Text
End If
SmtpMail.SmtpServer = smtpServer
SmtpMail.Send(mailMsg)
Return True
Catch
Return False
End Try
End Function
String compare
Here I used ConvertToString function mentioned earlier in the blog, so it could handle null values also.
Function returns true, strings are same, else different
Public Shared Function StringCompareNoCase(ByVal object1 As Object, _
ByVal object2 As Object) As Boolean
Dim string1 As String = String.Empty
Dim string2 As String = String.Empty
Try
string1 = ConvertToString(object1)
string2 = ConvertToString(object2)
If String.Compare(string1, string2, True) = 0 Then
Return True
Else
Return False
End If
Catch
Return False
End Try
End Function
Public Shared Function StringCompareNoCase(ByVal string1 As String, _
ByVal string2 As String) As Boolean
Try
If String.Compare(string1, string2, True) = 0 Then
Return True
Else
Return False
End If
Catch
Return False
End Try
End Function
Public Shared Function StringCompare(ByVal object1 As Object, _
ByVal object2 As Object) As Boolean
Dim string1 As String = String.Empty
Dim string2 As String = String.Empty
Try
string1 = ConvertToString(object1)
string2 = ConvertToString(object2)
If String.Compare(string1, string2, False) = 0 Then
Return True
Else
Return False
End If
Catch
Return False
End Try
End Function
Public Shared Function StringCompare(ByVal string1 As String, _
ByVal string2 As String) As Boolean
Try
If String.Compare(string1, string2, False) = 0 Then
Return True
Else
Return False
End If
Catch
Return False
End Try
End Function
Convert to boolean handling NULL
Try
If (value Is Nothing) OrElse (value Is DBNull.Value) Then
Return False
Else
Return Convert.ToBoolean(value)
End If
Catch
Return False
End Try
End Function
Public Shared Function ConvertToBoolean(ByVal value As String) As Boolean
Try
If (value Is Nothing) OrElse (value Is DBNull.Value) Then
Return False
Else
Return Convert.ToBoolean(value)
End If
Catch
Return False
End Try
End Function
Convert to Double handling NULL
Try
If (value Is Nothing) OrElse (value Is DBNull.Value) Then
Return 0
Else
Return Convert.ToDouble(value)
End If
Catch
Return 0
End Try
End Function
Public Shared Function ConvertToDouble(ByVal value As String) As Double
Try
If (value Is Nothing) OrElse (value Is DBNull.Value) Then
Return 0
Else
Return Convert.ToDouble(value)
End If
Catch
Return 0
End Try
End Function
Convert to Int32 handling NULL
Try
If (value Is Nothing) OrElse (value Is DBNull.Value) Then
Return 0
Else
Return Convert.ToInt32(value)
End If
Catch
Return 0
End Try
End Function
Public Shared Function ConvertToInt32(ByVal value As String) As Int32
Try
If (value Is Nothing) OrElse (value Is DBNull.Value) Then
Return 0
Else
Return Convert.ToInt32(value)
End If
Catch
Return 0
End Try
End Function
Convert to string handling NULL
Try
If (value Is Nothing) OrElse (value Is DBNull.Value) Then
Return String.Empty
Else
Return Convert.ToString(value).Trim()
End If
Catch
Return String.Empty
End Try
End Function
Public Shared Function ConvertToString(ByVal value As Boolean) As String
Try
Return Convert.ToString(value).Trim()
Catch
Return String.Empty
End Try
End Function
Public Shared Function ConvertToString(ByVal value As String) As String
Try
If (value Is Nothing) OrElse (value Is DBNull.Value) Then
Return String.Empty
Else
Return Convert.ToString(value).Trim()
End If
Catch
Return String.Empty
End Try
End Function
Thursday, August 25, 2005
Restricting windows close event - windows application
Heres a sample to check if the user clicks on 'X' in the right top of the window, instead of save and close button
' declare the variable in the form code behind
Private confirmClose As Boolean
Private Sub btnSaveAndClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveAndClose.Click
confirmClose = True
Me.Close()
End Sub
Private Sub DemoForm_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If Not confirmClose Then
' means the he has not clicked on trial button, but X
e.Cancel = True
' this will not allow the window to close
' add msg box to show that user has to click of
' save and close button, and cannot use 'X' to close the application
End If
End Sub
Relative path in user controls
~ indicates your app root folder
so if the control is in /mycontrols/usercontrols
u should use ~/mycontrols/usercontrols
Finding duplicates using SQL
If the primary key id is a integer based identity column, if not create a temp table with same structure and additional identity column, and use the identity column instead of primary key id
UPDATE TableName SET ErrorDescription = 'Duplicate record' WHERE PrimaryKeyId > (SELECT MIN(PrimaryKeyId) FROM TableName CheckDuplicate WHERE (CheckDuplicate.Code = TableName.Code OR CheckDuplicate.Name = TableName.Name)) AND ErrorDescription IS NULL
If records were
| PrimaryKeyId | Code | Name | ErrorDescription |
| 1 | CD1 | Name 1 | |
| 2 | CD2 | Name 2 | |
| 3 | CD1 | Name 3 | |
| 4 | CD4 | Name 1 |
They become
| PrimaryKeyId | Code | Name | ErrorDescription |
| 1 | CD1 | Name 1 | |
| 2 | CD2 | Name 2 | |
| 3 | CD1 | Name 3 | Duplicate record |
| 4 | CD4 | Name 1 | Duplicate record |
URL Encode from class
''' -----------------------------------------------------------------------------
''' <summary>
''' URL Encode the object
''' </summary>
''' <param name="value"></param>
''' <returns>URL Encoded string>/returns>
''' <remarks>
''' </remarks>
''' <history>
''' [K. Gopi] 8/25/2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Shared Function URLEncode(ByVal value As Object) As String
Try
If (value Is Nothing) OrElse (value Is DBNull.Value) Then
Return String.Empty
Else
Return Web.HttpUtility.UrlEncode(Convert.ToString(value))
End If
Catch
Return String.Empty
End Try
End Function
HTTPS/SSL and MIME Types
This is because the SSL by default adds the following headers
Pragma: no-cache
Cache-control: no-cache,max-age=0,must-revalidate
Due to these headers, the download does not work in IE, but works with Firefox.
http://support.microsoft.com/default.aspx?scid=kb;en-us;316431
To ensure that your code works in HTTPS/SSL also add the following code
Response.AddHeader("Pragma", "cache")
Check if your code works after adding this, if it is not working still then
go to IE Tools -> Internet options -> Advanced -> Security
uncheck the option "Do not save encrypted pages to disk" and try your code.
Wednesday, August 24, 2005
Automatic redirect on session time out
Response.AddHeader("Refresh", Convert.ToString((Session.Timeout * 60)) & "; URL=Path/Login.aspx")
Wednesday, August 10, 2005
Add multiple functions to windows onunload
var fnonunload = window.onunload;
if (fnonunload)
{
fnonunload = fnonunload +"";
fnonunload = fnonunload.replace("}", "closeChildWindow();");
fnonunload = fnonunload.replace("function anonymous() {", " ");
fnonunload = fnonunload.replace("function () {", " ");
window.onunload = new Function(fnonunload);
}
else
{
fnonunload = "closeChildWindow();";
window.onunload = new Function(fnonunload);
}
here by you could dynamically add multiple onunload functions from different places in the page.
Tuesday, August 02, 2005
SQL query optimization - Instead of NOT IN
Instead of
SELECT * FROM Orders WHERE Orders.OrderId NOT IN (SELECT OrderId FROM SalesDetails)
Use
SELECT * FROM Orders WHERE NOT EXISTS (SELECT 1 FROM SalesDetails WHERE SalesDetails.OrderId = Orders.OrderId)
Monday, July 04, 2005
Rendering to Firefox from ASP.NET
http://www.asptoday.com/Content.aspx?id=2339
Wednesday, June 29, 2005
Access AppSetting through a Class
Add a Class to the project like this one
Imports System.Configuration
Public Class MyWebConfig
Public Shared ReadOnly Property ConnectionInfo() As String
Get
Return ConfigurationSettings.AppSettings("ConnectionInfo")
End Get
End Property
End Class
In your project you could access the appsettings using
"MyWebConfig.ConnectionInfo"
Thursday, June 23, 2005
Enter key press in Web Forms
Add a onKeyPress event handler to body tag in aspx page
<body onkeypress="KeyPress()">
If you wish to call a button click even to be fired on enter key press then add the following code
<script language="javascript">
<!--
function KeyPress()
{
if (window.event.keyCode == 13)
{
window.event.keyCode =0;
document.all.btnAdd.click();
// the button for which button click event is to be fired
}
}
// -->
</script>
If in case you dont want the form to be posted on enter key, and the form to be posted only on click of the button then add this
<script language="javascript">
<!--
function KeyPress()
{
if (window.event.keyCode == 13)
{
window.event.keyCode =0;
}
}
// -->
</script>