Updated code (now supports the 508 requirement to place focus back on the control after a postback)...
Imports
Telerik.Web.UI
Partial
Class
UserControls_ComboBox
Inherits
System.Web.UI.UserControl
#Region "Global Variables"
'Enumerator for render mode
Private
objRenderMode
As
RenderingMode = RenderingMode.RadComboBox
Public
Enum
RenderingMode
RadComboBox
DropDownList
End
Enum
#End Region
#Region "Properties"
''' <summary>RenderMode</summary>
''' <remarks></remarks>
Public
Property
RenderMode()
As
RenderingMode
Get
Return
objRenderMode
End
Get
Set
(
ByVal
value
As
RenderingMode)
objRenderMode = value
End
Set
End
Property
''' <summary>RadComboBox</summary>
''' <remarks></remarks>
Public
ReadOnly
Property
RadComboBox()
As
RadComboBox
Get
Return
ddlRadComboBox
End
Get
End
Property
''' <summary>DropDownList</summary>
''' <remarks></remarks>
Public
ReadOnly
Property
DropDownList()
As
DropDownList
Get
If
(placeholderDropDownList.Controls.Count > 0)
Then
Return
placeholderDropDownList.Controls(0)
Else
Return
Nothing
End
If
End
Get
End
Property
''' <summary>AutoPostBack</summary>
''' <remarks></remarks>
Public
Property
AutoPostBack()
As
Boolean
Get
Return
ddlRadComboBox.AutoPostBack
End
Get
Set
(
ByVal
value
As
Boolean
)
ddlRadComboBox.AutoPostBack = value
End
Set
End
Property
''' <summary>Enabled</summary>
''' <remarks></remarks>
Public
Property
Enabled()
As
Boolean
Get
Return
ddlRadComboBox.Enabled
End
Get
Set
(
ByVal
value
As
Boolean
)
ddlRadComboBox.Enabled = value
End
Set
End
Property
''' <summary>SelectedValue</summary>
''' <remarks></remarks>
Public
Property
SelectedValue()
As
String
Get
Return
ddlRadComboBox.SelectedValue
End
Get
Set
(
ByVal
value
As
String
)
ddlRadComboBox.SelectedValue = value
End
Set
End
Property
''' <summary>SelectedIndex</summary>
''' <remarks></remarks>
Public
Property
SelectedIndex()
As
Integer
Get
Return
ddlRadComboBox.SelectedIndex
End
Get
Set
(
ByVal
value
As
Integer
)
ddlRadComboBox.SelectedIndex = value
End
Set
End
Property
''' <summary>SelectedItem</summary>
''' <remarks></remarks>
Public
ReadOnly
Property
SelectedItem()
As
RadComboBoxItem
Get
Return
ddlRadComboBox.SelectedItem
End
Get
End
Property
''' <summary>Text</summary>
''' <remarks></remarks>
Public
Property
Text()
As
String
Get
Return
ddlRadComboBox.Text
End
Get
Set
(
ByVal
value
As
String
)
ddlRadComboBox.Text = value
End
Set
End
Property
''' <summary>DataTextField</summary>
''' <remarks></remarks>
Public
Property
DataTextField()
As
String
Get
Return
ddlRadComboBox.DataTextField
End
Get
Set
(
ByVal
value
As
String
)
ddlRadComboBox.DataTextField = value
End
Set
End
Property
''' <summary>DataValueField</summary>
''' <remarks></remarks>
Public
Property
DataValueField()
As
String
Get
Return
ddlRadComboBox.DataValueField
End
Get
Set
(
ByVal
value
As
String
)
ddlRadComboBox.DataValueField = value
End
Set
End
Property
''' <summary>DataSource</summary>
''' <remarks></remarks>
Public
Property
DataSource()
As
Object
Get
Return
ddlRadComboBox.DataSource
End
Get
Set
(
ByVal
value
As
Object
)
ddlRadComboBox.DataSource = value
End
Set
End
Property
''' <summary>DataTextFormatString</summary>
''' <remarks></remarks>
Public
Property
DataTextFormatString()
As
String
Get
Return
ddlRadComboBox.DataTextFormatString
End
Get
Set
(
ByVal
value
As
String
)
ddlRadComboBox.DataTextFormatString = value
End
Set
End
Property
''' <summary>Width</summary>
''' <remarks></remarks>
Public
Property
Width()
As
Unit
Get
Return
ddlRadComboBox.Width
End
Get
Set
(
ByVal
value
As
Unit)
ddlRadComboBox.Width = value
End
Set
End
Property
''' <summary>Items</summary>
''' <remarks></remarks>
Public
ReadOnly
Property
Items()
As
Object
Get
Return
ddlRadComboBox.Items
End
Get
End
Property
''' <summary>onclick</summary>
''' <remarks></remarks>
Public
Property
onclick()
As
String
Get
Return
ddlRadComboBox.Attributes(
"onclick"
)
End
Get
Set
(
ByVal
value
As
String
)
ddlRadComboBox.Attributes(
"onclick"
) = value
End
Set
End
Property
#End Region
#Region "Public Events"
Public
Event
DataBinding
As
EventHandler
Public
Event
DataBound
As
EventHandler
Public
Event
Disposed
As
EventHandler
Public
Event
Init
As
EventHandler
Public
Event
ItemCreated
As
EventHandler
Public
Event
ItemDataBound
As
EventHandler
Public
Event
ItemsRequested
As
EventHandler
Public
Event
Load
As
EventHandler
Public
Event
TextChanged
As
EventHandler
Public
Event
Unload
As
EventHandler
Public
Event
PreRender
As
EventHandler
Public
Event
SelectedIndexChanged
As
EventHandler
#End Region
#Region "Event Handlers"
''' <summary>Page_Load</summary>
''' <remarks></remarks>
Protected
Sub
Page_Load(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
Me
.Load
'Render the RadComboBox as a DropDownList, if requested
If
(
Me
.RenderMode = RenderingMode.DropDownList)
Then
'Transfer the items
Dim
ddlDropDownList
As
New
DropDownList
ddlDropDownList.ID = ddlRadComboBox.ID &
"_DropDownList"
For
Each
objComboBoxItem
As
RadComboBoxItem
In
ddlRadComboBox.Items
ddlDropDownList.Items.Add(
New
ListItem(objComboBoxItem.Text, objComboBoxItem.Value))
Next
'Transfer the selected index and other attributes
ddlDropDownList.SelectedIndex = ddlRadComboBox.SelectedIndex
ddlDropDownList.Enabled = ddlRadComboBox.Enabled
ddlDropDownList.Attributes(
"onclick"
) = ddlRadComboBox.Attributes(
"onclick"
)
'Wire the selected index change event
ddlDropDownList.Attributes(
"onchange"
) =
"DropDownList_IndexChanged(this, event)"
'Replace the ComboBox with the DropDownList
ddlRadComboBox.Attributes(
"style"
) =
"display: none;"
placeholderDropDownList.Controls.Add(ddlDropDownList)
'Register the JavaScript that ties the DropDownList onchange event to the RadComboBox SelectedIndexChanged event
Dim
strJavaScript
As
New
StringBuilder
strJavaScript.Append(
"function DropDownList_IndexChanged(thisSender, thisEvent) {"
& vbCrLf)
strJavaScript.Append(
"var objRadComboBox = $find(thisSender.id.replace("
"_DropDownList"
", "
""
"));"
& vbCrLf)
strJavaScript.Append(
"objRadComboBox.trackChanges();"
& vbCrLf)
strJavaScript.Append(
"objRadComboBox.findItemByValue(thisSender.value).select();"
& vbCrLf)
strJavaScript.Append(
"objRadComboBox.updateClientState();"
& vbCrLf)
strJavaScript.Append(
"objRadComboBox.commitChanges();"
& vbCrLf)
strJavaScript.Append(
"}"
& vbCrLf & vbCrLf)
ScriptManager.RegisterClientScriptBlock(
Me
.Page,
Me
.
GetType
,
"DropDownList_IndexChanged"
, strJavaScript.ToString,
True
)
End
If
End
Sub
''' <summary>ddlRadComboBox_PreRender</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_PreRender(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
ddlRadComboBox.PreRender
RaiseEvent
PreRender(sender, e)
End
Sub
''' <summary>ddlRadComboBox_DataBinding</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_DataBinding(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
ddlRadComboBox.DataBinding
RaiseEvent
DataBinding(sender, e)
End
Sub
''' <summary>ddlRadComboBox_DataBound</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_DataBound(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
ddlRadComboBox.DataBound
RaiseEvent
DataBound(sender, e)
End
Sub
''' <summary>ddlRadComboBox_Disposed</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_Disposed(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
ddlRadComboBox.Disposed
RaiseEvent
Disposed(sender, e)
End
Sub
''' <summary>ddlRadComboBox_Init</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_Init(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
ddlRadComboBox.Init
RaiseEvent
Init(sender, e)
End
Sub
''' <summary>ddlRadComboBox_ItemCreated</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_ItemCreated(
ByVal
sender
As
Object
,
ByVal
e
As
Telerik.Web.UI.RadComboBoxItemEventArgs)
Handles
ddlRadComboBox.ItemCreated
RaiseEvent
ItemCreated(sender, e)
End
Sub
''' <summary>ddlRadComboBox_ItemDataBound</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_ItemDataBound(
ByVal
sender
As
Object
,
ByVal
e
As
Telerik.Web.UI.RadComboBoxItemEventArgs)
Handles
ddlRadComboBox.ItemDataBound
RaiseEvent
ItemDataBound(sender, e)
End
Sub
''' <summary>ddlRadComboBox_ItemsRequested</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_ItemsRequested(
ByVal
o
As
Object
,
ByVal
e
As
Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs)
Handles
ddlRadComboBox.ItemsRequested
RaiseEvent
ItemsRequested(o, e)
End
Sub
''' <summary>ddlRadComboBox_Load</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_Load(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
ddlRadComboBox.Load
RaiseEvent
Load(sender, e)
End
Sub
''' <summary>ddlRadComboBox_SelectedIndexChanged</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_SelectedIndexChanged(
ByVal
o
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
ddlRadComboBox.SelectedIndexChanged
'Set the ID to the user control's ID, and raise the event with the appropriate control
Dim
strOriginalID
As
String
If
(
Me
.RenderMode = RenderingMode.RadComboBox)
Then
strOriginalID = ddlRadComboBox.ID
ddlRadComboBox.ID =
Me
.ID
RaiseEvent
SelectedIndexChanged(ddlRadComboBox,
Nothing
)
ddlRadComboBox.ID = strOriginalID
ElseIf
(
Me
.RenderMode = RenderingMode.DropDownList)
Then
strOriginalID = placeholderDropDownList.Controls(0).ID
placeholderDropDownList.Controls(0).ID =
Me
.ID
RaiseEvent
SelectedIndexChanged(placeholderDropDownList.Controls(0),
Nothing
)
placeholderDropDownList.Controls(0).ID = strOriginalID
End
If
End
Sub
''' <summary>ddlRadComboBox_TextChanged</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_TextChanged(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
ddlRadComboBox.TextChanged
RaiseEvent
TextChanged(sender, e)
End
Sub
''' <summary>ddlRadComboBox_Unload</summary>
''' <remarks></remarks>
Protected
Sub
ddlRadComboBox_Unload(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)
Handles
ddlRadComboBox.Unload
RaiseEvent
Unload(sender, e)
End
Sub
#End Region
#Region "Sub Procedures"
''' <summary>Focus</summary>
''' <remarks></remarks>
Public
Overrides
Sub
Focus()
If
(
Me
.RenderMode = RenderingMode.RadComboBox)
Then
ddlRadComboBox.Focus()
ElseIf
(
Me
.RenderMode = RenderingMode.DropDownList)
Then
placeholderDropDownList.Controls(0).Focus()
End
If
End
Sub
''' <summary>ClearSelection</summary>
''' <remarks></remarks>
Public
Sub
ClearSelection()
If
(
Me
.RenderMode = RenderingMode.RadComboBox)
Then
ddlRadComboBox.ClearSelection()
ElseIf
(
Me
.RenderMode = RenderingMode.DropDownList)
Then
CType
(placeholderDropDownList.Controls(0), DropDownList).ClearSelection()
End
If
End
Sub
#End Region
#Region "Functions"
''' <summary>FindItemByText</summary>
''' <remarks></remarks>
Public
Function
FindItemByText(
ByRef
strItemText
As
String
)
As
RadComboBoxItem
Return
ddlRadComboBox.FindItemByText(strItemText)
End
Function
''' <summary>FindItemIndexByText</summary>
''' <remarks></remarks>
Public
Function
FindItemIndexByText(
ByRef
strItemText
As
String
)
As
Integer
Return
ddlRadComboBox.FindItemIndexByText(strItemText)
End
Function
''' <summary>FindItemIndexByText</summary>
''' <remarks></remarks>
Public
Function
FindItemIndexByText(
ByRef
strItemText
As
String
,
ByRef
boolIgnoreCase
As
Boolean
)
As
Integer
Return
ddlRadComboBox.FindItemIndexByText(strItemText, boolIgnoreCase)
End
Function
''' <summary>FindItemIndexByValue</summary>
''' <remarks></remarks>
Public
Function
FindItemIndexByValue(
ByRef
strItemValue
As
String
)
As
Integer
Return
ddlRadComboBox.FindItemIndexByValue(strItemValue)
End
Function
''' <summary>FindItemIndexByValue</summary>
''' <remarks></remarks>
Public
Function
FindItemIndexByValue(
ByRef
strItemValue
As
String
,
ByRef
boolIgnoreCase
As
Boolean
)
As
Integer
Return
ddlRadComboBox.FindItemIndexByValue(strItemValue, boolIgnoreCase)
End
Function
#End Region
End
Class