I've got a radio group using an UltraOptionSet that I would like to disable certain options in at different times.
I've tried looking for options on the set itself, but can only find the global enabled or disabled property.
The individual OptionSetItem objects don't seem to have an enabled property...
Does anyone know how this can be done?
Thanks
Hi,
No, there's is currently no way to disable items in the OptionSet. The only thing you could do is remove the item from the list so the user can't select it.
You should submit a feature request to Infragistics: Request a Feature or Component
Is such an option available in infragistics 10.3 ?
Thanks.
Never say never...
1. Create a module with these functions:
<Extension()> _ Public Function GetIndex(ByVal items As ValueListItemsCollection, ByVal dataValue As Object) As Integer Dim result As Integer = -1 Try If dataValue IsNot Nothing Then Dim i As Integer = 0 For Each item As Infragistics.Win.ValueListItem In items If item.DataValue IsNot Nothing AndAlso dataValue.ToString.Equals(CStr(item.DataValue)) Then result = i Exit For End If i += 1 Next End If Catch ex As Exception Throw New Exception(String.Format("{0}.GetIndex Error", items.GetType.Name), ex) End Try Return result End Function <Extension()> _ Public Function GetItem(ByVal items As ValueListItemsCollection, ByVal dataValue As Object) As ValueListItem Dim result As ValueListItem = Nothing Try If dataValue IsNot Nothing Then For Each item As Infragistics.Win.ValueListItem In items If item.DataValue IsNot Nothing AndAlso dataValue.ToString.Equals(CStr(item.DataValue)) Then result = item Exit For End If Next End If Catch ex As Exception Throw New Exception(String.Format("{0}.GetItem Error", items.GetType.Name), ex) End Try Return result End Function <Extension()> _ Public Function GetUIItem(ByVal ctrl As Infragistics.Win.UltraWinEditors.UltraOptionSet, _ ByVal dataValue As Object) As OptionSetOptionButtonUIElement Dim result As OptionSetOptionButtonUIElement = Nothing Try If dataValue Is Nothing Then Throw New ArgumentNullException("The data value may not be null") Dim item As ValueListItem = ctrl.Items.GetItem(dataValue) If item IsNot Nothing Then For Each childElement As UIElement In ctrl.UIElement.ChildElements If TypeOf childElement Is OptionSetEmbeddableUIElement Then Dim embeddableElement As OptionSetEmbeddableUIElement = CType(childElement, _ OptionSetEmbeddableUIElement) For Each subElement As UIElement In embeddableElement.ChildElements If TypeOf subElement Is OptionSetOptionButtonUIElement Then Dim buttonElement As OptionSetOptionButtonUIElement = CType(subElement, _ OptionSetOptionButtonUIElement) If buttonElement.Text = item.DisplayText Then result = buttonElement Exit For End If End If Next Exit For End If Next End If Catch ex As Exception Throw New Exception(String.Format("{0}.GetUIItem Error", ctrl.GetType.Name), ex) End Try Return result End Function <Extension()> _ Public Function IsItemEnabled(ByVal ctrl As Infragistics.Win.UltraWinEditors.UltraOptionSet, _ ByVal dataValue As Object) As Boolean Dim result As Boolean = False Try If dataValue Is Nothing Then Throw New ArgumentNullException("The data value may not be null") Dim buttonElement As OptionSetOptionButtonUIElement = ctrl.GetUIItem(dataValue) If buttonElement IsNot Nothing Then result = buttonElement.Enabled End If Catch ex As Exception Throw New Exception(String.Format("{0}.IsItemEnabled Error", ctrl.GetType.Name), ex) End Try Return result End Function <Extension()> _ Public Sub EnableItem(ByVal ctrl As Infragistics.Win.UltraWinEditors.UltraOptionSet, _ ByVal dataValue As Object, ByVal enabled As Boolean) Try If dataValue Is Nothing Then Throw New ArgumentNullException("The data value may not be null") Dim buttonElement As OptionSetOptionButtonUIElement = ctrl.GetUIItem(dataValue) If buttonElement IsNot Nothing Then buttonElement.Enabled = enabled End If Catch ex As Exception Throw New Exception(String.Format("{0}.EnableItem Error", ctrl.GetType.Name), ex) End Try End Sub
<Extension()> _ Public Function GetIndex(ByVal items As ValueListItemsCollection, ByVal dataValue As Object) As Integer Dim result As Integer = -1 Try If dataValue IsNot Nothing Then Dim i As Integer = 0 For Each item As Infragistics.Win.ValueListItem In items If item.DataValue IsNot Nothing AndAlso dataValue.ToString.Equals(CStr(item.DataValue)) Then result = i Exit For End If i += 1 Next End If Catch ex As Exception Throw New Exception(String.Format("{0}.GetIndex Error", items.GetType.Name), ex) End Try Return result End Function <Extension()> _ Public Function GetItem(ByVal items As ValueListItemsCollection, ByVal dataValue As Object) As ValueListItem Dim result As ValueListItem = Nothing Try If dataValue IsNot Nothing Then For Each item As Infragistics.Win.ValueListItem In items If item.DataValue IsNot Nothing AndAlso dataValue.ToString.Equals(CStr(item.DataValue)) Then result = item Exit For End If Next End If Catch ex As Exception Throw New Exception(String.Format("{0}.GetItem Error", items.GetType.Name), ex) End Try Return result End Function <Extension()> _ Public Function GetUIItem(ByVal ctrl As Infragistics.Win.UltraWinEditors.UltraOptionSet, _ ByVal dataValue As Object) As OptionSetOptionButtonUIElement Dim result As OptionSetOptionButtonUIElement = Nothing Try If dataValue Is Nothing Then Throw New ArgumentNullException("The data value may not be null") Dim item As ValueListItem = ctrl.Items.GetItem(dataValue) If item IsNot Nothing Then For Each childElement As UIElement In ctrl.UIElement.ChildElements If TypeOf childElement Is OptionSetEmbeddableUIElement Then Dim embeddableElement As OptionSetEmbeddableUIElement = CType(childElement, _
OptionSetEmbeddableUIElement) For Each subElement As UIElement In embeddableElement.ChildElements If TypeOf subElement Is OptionSetOptionButtonUIElement Then Dim buttonElement As OptionSetOptionButtonUIElement = CType(subElement, _ OptionSetOptionButtonUIElement) If buttonElement.Text = item.DisplayText Then result = buttonElement Exit For End If End If Next Exit For End If Next End If Catch ex As Exception Throw New Exception(String.Format("{0}.GetUIItem Error", ctrl.GetType.Name), ex) End Try Return result End Function <Extension()> _ Public Function IsItemEnabled(ByVal ctrl As Infragistics.Win.UltraWinEditors.UltraOptionSet, _ ByVal dataValue As Object) As Boolean Dim result As Boolean = False Try If dataValue Is Nothing Then Throw New ArgumentNullException("The data value may not be null") Dim buttonElement As OptionSetOptionButtonUIElement = ctrl.GetUIItem(dataValue) If buttonElement IsNot Nothing Then result = buttonElement.Enabled End If Catch ex As Exception Throw New Exception(String.Format("{0}.IsItemEnabled Error", ctrl.GetType.Name), ex) End Try Return result End Function <Extension()> _ Public Sub EnableItem(ByVal ctrl As Infragistics.Win.UltraWinEditors.UltraOptionSet, _ ByVal dataValue As Object, ByVal enabled As Boolean) Try If dataValue Is Nothing Then Throw New ArgumentNullException("The data value may not be null") Dim buttonElement As OptionSetOptionButtonUIElement = ctrl.GetUIItem(dataValue) If buttonElement IsNot Nothing Then buttonElement.Enabled = enabled End If Catch ex As Exception Throw New Exception(String.Format("{0}.EnableItem Error", ctrl.GetType.Name), ex) End Try End Sub
2. Add code like this to the ValueChanged event handler so that disabled items cannot be selected:
Private Sub UltraOptionSet1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles UltraOptionSet1.ValueChanged If UltraOptionSet1.Value IsNot Nothing Then If UltraOptionSet1.IsItemEnabled(UltraOptionSet1.Value) Then UltraOptionSet1.Tag = UltraOptionSet1.Value ' Store the last valid selected value. ' Do something else if you need to. Else UltraOptionSet1.Value = UltraOptionSet1.Tag UltraOptionSet1.FocusedIndex = UltraOptionSet1.Items.GetIndex(UltraOptionSet1.Tag) UltraOptionSet1.Refresh() End If End If End IfEnd Sub
3. Enable or disable items like this:
UltraOptionSet1.EnableItem(5, False)
This example will disable the first option item with a data value of 5.
No, there is no way to disable individual items.