Thursday, June 01, 2006

IgnoreSectionHandler

When you add custom configurations in application config, then you will have to provide configuration handlers in config sections, when you dont want to handle them seperately, instead plan to read the xml and get values use

Add section with type of System.Configuration.IgnoreSectionHandler, System for the custom config that you want to ignore

this would prevent the system from throwing exception

Friday, May 26, 2006

Batch Build - VS.Net 2003

Batch build option is available in VS.Net 2005 [Solution with C# projects], that allows you to build for all configuration. User could select multiple project and various build configuration.

But "Batch Build" option would not be available even if one VB.Net project is added to the solution.

System Tray Application

Trying to do a system tray application,

points to note:
1) ShowInTaskbar property of the window should be set to false
2) on Form_Load function call the hide function
3) Add NotifyIcon object
3) Add ContextMenu, and menu event handlers
4) Set the contextmenu object to NotifyIcon's contextmenu

Monday, May 22, 2006

HttpRuntime - Max request length

When using Input type file and trying to upload huge files, returns an error "Maximum request length exceeded" or page not available error, thats because the ASP.Net max request length is set to 4 megs.

Incase you want to upload bigger files, then config has to be changed.

to be added in web.config [this would accept till 100 megs]

for further info refer http://support.microsoft.com/default.aspx?scid=kb;EN-US;295626

Friday, May 05, 2006

Difference between Build Solution and Rebuild Solution option in VS.Net

Source of information : http://dotnetjunkies.com/WebLog/nilapenn/archive/2004/05/22/14251.aspx

VisualStudio.Net provides us with two options for compiling and creating builds for our application. They are Build Solution and Rebuild Solution options which can be accessed from the Build menu. The differences between these two options are

1. The Build Solution option compiles only those project files and components that have changed since the last build. For example consider that you have two projects Proj1 and Proj2 in your solution MySolution. When you compile the solution using Build Solution option after making some changes to Proj1 only Proj1 will be compiled and built but Proj2 will not be compiled since there are no changes to it.

2. On the other hand the Rebuild Solution option builds all project files and components irrespective of the changes made to them. For example consider that you have two projects Proj1 and Proj2 in your solution MySolution. When you compile the solution using Rebuild Solution option after making some changes to Proj1, both Proj1 and Proj2 will be compiled and built even though there are no changes made to Proj2.

Thursday, December 08, 2005

Setting Name for controls created using Javascript

when you create input controls dynamically using javascript like
var inputValue = document.createElement('input');
and try to set the id using
inputValue.setAttribute('id', 'controlName');
works fine, creates and control added is <input id=controlName>
but when you try to set the name attribute, does not reflect in the control, reason being IE does not allow you to change the name of the control, after it is created.
Work around for this is
var inputValue = document.createElement('<input name="controlName">');
this would create the control with the name element.

If asked why should you go for this work around, in postback when you try to use Request.Form to read the dynamically created controls, would work only if the name attribute is added.

Friday, September 02, 2005

Set values for password control

When trying to set value for asp:textbox control with textmode password, using textboxname.Text, still loads blank textbox control.
To get the server control of password type with value use the following code instead
textboxname.Attributes("value") = "password"

Wednesday, August 31, 2005

Accessing user controls from code behind

You could access user controls from code behind to add dynamic controls

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

Custom text box with required field validator, regular expression validators

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" &&nbsp;_typeSpecialChars &&nbsp;"]*"
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" &&nbsp;_typeSpecialChars &&nbsp;"]*"
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=""" &&nbsp;Me.ClientID &&nbsp;""">" &&nbsp;Me.Text &&nbsp;"</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=""" &&nbsp;Me._requiredCssClass &&nbsp;""">" &&nbsp;Me._requiredText &&nbsp;"</span>")
Else
output.Write(HtmlTextWriter.SpaceChar)
output.Write("<span style=""color:Red"">" &&nbsp;Me._requiredText &&nbsp;"</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," &&nbsp;Me.MaxLength &&nbsp;");")
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
Email
End Enum
End Class

Custom drop down list

Drop down box that has autocomplete option

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=""" &&nbsp;Me._requiredCssClass &&nbsp;""">" &&nbsp;Me._requiredText &&nbsp;"</span>")
Else
output.Write(HtmlTextWriter.SpaceChar)
output.Write("<span style=""color:Red"">" &&nbsp;Me._requiredText &&nbsp;"</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=" &&nbsp;Chr(34) &&nbsp;"javascript" &&nbsp;Chr(34) &&nbsp;" " &&nbsp;vbCrLf)
script.Append("type=" &&nbsp;Chr(34) &&nbsp;"text/javascript" &&nbsp;Chr(34) &&nbsp;">" &&nbsp;vbCrLf)
script.Append("function " &&nbsp;functionName &&nbsp;" (dropdownlist,caseSensitive) {" &&nbsp;vbCrLf)
script.Append(" // check the keypressBuffer attribute is defined on the dropdownlist" &&nbsp;vbCrLf)
script.Append(" var undefined; " &&nbsp;vbCrLf)
script.Append(" if (dropdownlist.keypressBuffer == undefined) { " &&nbsp;vbCrLf)
script.Append(" dropdownlist.keypressBuffer = ''; " &&nbsp;vbCrLf)
script.Append(" } " &&nbsp;vbCrLf)
script.Append(" // get the key that was pressed " &&nbsp;vbCrLf)
script.Append(" var key = String.fromCharCode(window.event.keyCode); " &&nbsp;vbCrLf)
script.Append(" dropdownlist.keypressBuffer += key;" &&nbsp;vbCrLf)
script.Append(" if (!caseSensitive) {" &&nbsp;vbCrLf)
script.Append(" // convert buffer to lowercase" &&nbsp;vbCrLf)
script.Append(" dropdownlist.keypressBuffer = dropdownlist.keypressBuffer.toLowerCase();" &&nbsp;vbCrLf)
script.Append(" }" &&nbsp;vbCrLf)
script.Append(" // find if it is the start of any of the options " &&nbsp;vbCrLf)
script.Append(" var optionsLength = dropdownlist.options.length; " &&nbsp;vbCrLf)
script.Append(" for (var n=0; n < optionsLength; n++) { " &&nbsp;vbCrLf)
script.Append(" var optionText = dropdownlist.options[n].text; " &&nbsp;vbCrLf)
script.Append(" if (!caseSensitive) {" &&nbsp;vbCrLf)
script.Append(" optionText = optionText.toLowerCase();" &&nbsp;vbCrLf)
script.Append(" }" &&nbsp;vbCrLf)
script.Append(" if (optionText.indexOf(dropdownlist.keypressBuffer,0) == 0) { " &&nbsp;vbCrLf)
script.Append(" dropdownlist.selectedIndex = n; " &&nbsp;vbCrLf)
script.Append(" return false; // cancel the default behavior since " &&nbsp;vbCrLf)
script.Append(" // we have selected our own value " &&nbsp;vbCrLf)
script.Append(" } " &&nbsp;vbCrLf)
script.Append(" } " &&nbsp;vbCrLf)
script.Append(" // reset initial key to be inline with default behavior " &&nbsp;vbCrLf)
script.Append(" dropdownlist.keypressBuffer = key; " &&nbsp;vbCrLf)
script.Append(" return true; // give default behavior " &&nbsp;vbCrLf)
script.Append("} " &&nbsp;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

following function can be added in a utility class and 
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

Comparing strings using equal to operator is an overhead especially when you try to change case and compare, instead string.compare could be used.

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

  Public Shared Function ConvertToBoolean(ByVal value As Object) 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

  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

  Public Shared Function ConvertToDouble(ByVal value As Object) 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

  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

Public Shared Function ConvertToInt32(ByVal value As Object) 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

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

    Public Shared Function ConvertToString(ByVal value As Object) 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

    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

use ~/ instead of your relative [../../] paths in user controls as they could be used by pages in different level folders

~ indicates your app root folder
so if the control is in /mycontrols/usercontrols
u should use ~/mycontrols/usercontrols

Finding duplicates using SQL

Heres a query that helps you find the duplicates and updates all duplicate records with error description as duplicate record leaving one record
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

PrimaryKeyIdCodeNameErrorDescription
1CD1Name 1
2CD2Name 2
3CD1Name 3
4CD4Name 1



They become

PrimaryKeyIdCodeNameErrorDescription
1CD1Name 1
2CD2Name 2
3CD1Name 3Duplicate record
4CD4Name 1Duplicate record