This is a migrated thread and some comments may be shown as answers.

[Solved] disable item

11 Answers 922 Views
ComboBox
This is a migrated thread and some comments may be shown as answers.
appdev
Top achievements
Rank 1
appdev asked on 03 Sep 2009, 10:02 PM
i have 2 comboboxes when an item selects on combo1 i want to disable few items on combobox2. like this

combobox1           combobox2
1                                7
2                                8
3                                9
4                                10
5                                11

so if item 1 is selected combobox 2 only allow user to select 7 or 8. if 2 is selected only 8 or 9 can be selected. thank you for your help.

11 Answers, 1 is accepted

Sort by
0
Paul
Telerik team
answered on 04 Sep 2009, 08:26 AM
Hello Duy,

Here's a sample code snippet that shows one possible approach:

ASPX:
<telerik:RadComboBox ID="RadComboBox1" runat="server" OnSelectedIndexChanged="RadComboBox1_SelectedIndexChanged" 
        AutoPostBack="true" AllowCustomText="true" EmptyMessage="-= Select value =-"
        <Items> 
            <telerik:RadComboBoxItem runat="server" Text="1" Value="1" /> 
            <telerik:RadComboBoxItem runat="server" Text="2" Value="2" /> 
            <telerik:RadComboBoxItem runat="server" Text="3" Value="3" /> 
        </Items> 
    </telerik:RadComboBox> 
    <telerik:RadComboBox ID="RadComboBox2" runat="server" AllowCustomText="true" EmptyMessage="-= Select value =-"
        <Items> 
            <telerik:RadComboBoxItem runat="server" Text="4" Value="4" /> 
            <telerik:RadComboBoxItem runat="server" Text="5" Value="5" /> 
            <telerik:RadComboBoxItem runat="server" Text="6" Value="6" /> 
        </Items> 
    </telerik:RadComboBox> 

Code-behind
    protected void RadComboBox1_SelectedIndexChanged(object o, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e) 
    { 
        switch(e.Text) 
        { 
            case "1"
                RadComboBox2.Items[0].Enabled = false
                RadComboBox2.Items[1].Enabled = true
                RadComboBox2.Items[2].Enabled = true
                break
            case "2"
                RadComboBox2.Items[0].Enabled = true
                RadComboBox2.Items[1].Enabled = false
                RadComboBox2.Items[2].Enabled = true
                break
            case "3"
                RadComboBox2.Items[0].Enabled = true
                RadComboBox2.Items[1].Enabled = true
                RadComboBox2.Items[2].Enabled = false
                break
        } 


All the best,
Paul
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
appdev
Top achievements
Rank 1
answered on 04 Sep 2009, 10:57 AM
is there a way to do this on the client side? thanks a million
0
Accepted
Paul
Telerik team
answered on 04 Sep 2009, 12:25 PM
Hello Duy,

Sure, here's the client-side alternative:

<form id="form1" runat="server"
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server"
    </telerik:RadScriptManager> 
 
    <script type="text/javascript"
 
        function OnClientSelectedIndexChanged(sender, eventArgs) { 
            var item = eventArgs.get_item(); 
            var targetCombo = $find('<%= RadComboBox2.ClientID %>'); 
 
            var itemText = item.get_text(); 
            switch (itemText) { 
                case "1": 
                    targetCombo.clearSelection(); 
                    targetCombo.set_emptyMessage("-Select text =-"); 
                    targetCombo.get_items().getItem(0).disable(); 
                    targetCombo.get_items().getItem(1).enable(); 
                    targetCombo.get_items().getItem(2).enable(); 
                    break; 
                case "2": 
                    targetCombo.clearSelection(); 
                    targetCombo.set_emptyMessage("-Select text =-"); 
                    targetCombo.get_items().getItem(0).enable(); 
                    targetCombo.get_items().getItem(1).disable(); 
                    targetCombo.get_items().getItem(2).enable(); 
                    break; 
                case "3": 
                    targetCombo.clearSelection(); 
                    targetCombo.set_emptyMessage("-Select text =-"); 
                    targetCombo.get_items().getItem(0).enable(); 
                    targetCombo.get_items().getItem(1).enable(); 
                    targetCombo.get_items().getItem(2).disable(); 
                    break; 
            } 
        }  
    </script> 
 
    <telerik:RadComboBox ID="RadComboBox1" runat="server" OnClientSelectedIndexChanged="OnClientSelectedIndexChanged" 
        AllowCustomText="true" EmptyMessage="-= Select text =-"
        <Items> 
            <telerik:RadComboBoxItem runat="server" Text="1" Value="1" /> 
            <telerik:RadComboBoxItem runat="server" Text="2" Value="2" /> 
            <telerik:RadComboBoxItem runat="server" Text="3" Value="3" /> 
        </Items> 
    </telerik:RadComboBox> 
    <telerik:RadComboBox ID="RadComboBox2" runat="server" AllowCustomText="true" EmptyMessage="-= Select text =-"
        <Items> 
            <telerik:RadComboBoxItem runat="server" Text="4" Value="4" /> 
            <telerik:RadComboBoxItem runat="server" Text="5" Value="5" /> 
            <telerik:RadComboBoxItem runat="server" Text="6" Value="6" /> 
        </Items> 
    </telerik:RadComboBox> 
    </form> 


Sincerely yours,
Paul
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
appdev
Top achievements
Rank 1
answered on 04 Sep 2009, 01:06 PM
is there a way for me to get the control directly instead of trying to use the $find. bc everytime when i do that i get
The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

and if i switch to <%# like everyone else suggested when i search for the error it just plain stop working. can i do somethin glike

radcombobox1.get_items().getItem(0).disable;

when i tried to do it directly it just keep saying object does not support this method.

i populate my items from the server so there's no predefine items like the one u showed bleow. i dont know if that is causing the issue. thanks.
0
Paul
Telerik team
answered on 04 Sep 2009, 01:21 PM
Hello Duy,

Just place the JS function inside a RadScriptBlock control and let us know how it goes.

<telerik:RadScriptBlock runat="server" ID="RadScriptBlock1"> 
<script type="text/javascript">  
  
        function OnClientSelectedIndexChanged(sender, eventArgs) {  
            var item = eventArgs.get_item();  
            var targetCombo = $find('<%= RadComboBox2.ClientID %>');  
  
            var itemText = item.get_text();  
            switch (itemText) {  
                case "1":  
                    targetCombo.clearSelection();  
                    targetCombo.set_emptyMessage("-Select text =-");  
                    targetCombo.get_items().getItem(0).disable();  
                    targetCombo.get_items().getItem(1).enable();  
                    targetCombo.get_items().getItem(2).enable();  
                    break;  
                case "2":  
                    targetCombo.clearSelection();  
                    targetCombo.set_emptyMessage("-Select text =-");  
                    targetCombo.get_items().getItem(0).enable();  
                    targetCombo.get_items().getItem(1).disable();  
                    targetCombo.get_items().getItem(2).enable();  
                    break;  
                case "3":  
                    targetCombo.clearSelection();  
                    targetCombo.set_emptyMessage("-Select text =-");  
                    targetCombo.get_items().getItem(0).enable();  
                    targetCombo.get_items().getItem(1).enable();  
                    targetCombo.get_items().getItem(2).disable();  
                    break;  
            }  
        }   
    </script>  
</telerik:RadScriptBlock> 


Regards,
Paul
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
appdev
Top achievements
Rank 1
answered on 04 Sep 2009, 01:31 PM
works like a charm thank you very much
but instead of 

targetCombo.get_items().getItem(0).disable();
can you get the actual value like 

 

targetCombo.get_items().gevalue("thevalue").disable();


and how do i instead of harcdoe 

 

var

 

targetCombo = $find('<%= Radcombobox1.ClientID %>');

make it dynamic like

 

var

 

targetCombo = $find('<%= ' + control_string + ' %>');

 

0
Accepted
Paul
Telerik team
answered on 04 Sep 2009, 02:20 PM
Hello Duy,

You can use the findItemByValue() method, i.e.

 <script type="text/javascript"
 
            function OnClientSelectedIndexChanged(sender, eventArgs) { 
                var item = eventArgs.get_item(); 
                var targetCombo = $find('<%= RadComboBox2.ClientID %>'); 
 
                var itemText = item.get_text(); 
                switch (itemText) { 
                    case "1"
                        targetCombo.clearSelection(); 
                        targetCombo.set_emptyMessage("-= Select text =-"); 
                        targetCombo.findItemByValue("4").disable(); 
                        targetCombo.findItemByValue("5").enable(); 
                        targetCombo.findItemByValue("6").enable(); 
                        break
                    case "2"
                        targetCombo.clearSelection(); 
                        targetCombo.set_emptyMessage("-= Select text =-"); 
                        targetCombo.findItemByValue("4").enable(); 
                        targetCombo.findItemByValue("5").disable(); 
                        targetCombo.findItemByValue("6").enable(); 
                        break
                    case "3"
                        targetCombo.clearSelection(); 
                        targetCombo.set_emptyMessage("-= Select text =-"); 
                        targetCombo.findItemByValue("4").enable(); 
                        targetCombo.findItemByValue("5").enable(); 
                        targetCombo.findItemByValue("6").disable(); 
                        break
                } 
            }    
        </script> 


All the best,
Paul
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
appdev
Top achievements
Rank 1
answered on 04 Sep 2009, 02:22 PM
and how do i instead of harcdoe 

 

var

 

 

targetCombo = $find('<%= Radcombobox1.ClientID %>');

make it dynamic like

 

var

 

targetCombo = $find('<%= ' + control_string + ' %>');

0
appdev
Top achievements
Rank 1
answered on 07 Sep 2009, 11:18 AM

because i have a multiples comboboxes not just 2 so i need a generic onclientselectedindexchanged that can determine which dropdownlist was clicked on so i can disable items on the right corespond combobox. so i was trying the below code to see if that works but it kept on giving me undefine instead of the value of the clicked on combobox. any idea?

function OnClientSelectedIndexChanged(sender, eventArgs)
alert(sender.id); if i do this it says undefined
if i do $find(sender.id) it says null

eventually it should be 
switch (sender.id)
{
    case "1":
        var targetCombo = $find('<%= ddlOperator1.ClientID %>');

 

 

        break;
    case "2":
        var targetCombo = $find('<%= ddlOperator2.ClientID %>');
        break;
}

     thanks.

 

0
appdev
Top achievements
Rank 1
answered on 08 Sep 2009, 03:19 AM

because i have a multiples comboboxes not just 2 so i need a generic onclientselectedindexchanged that can determine which dropdownlist was clicked on so i can disable items on the right corespond combobox. so i was trying the below code to see if that works but it kept on giving me undefine instead of the value of the clicked on combobox. any idea?

function OnClientSelectedIndexChanged(sender, eventArgs)
alert(sender.id); if i do this it says undefined
if i do $find(sender.id) it says null

eventually it should be 
switch (sender.id)
{
    case "1":
        var targetCombo = $find('<%= ddlOperator1.ClientID %>');

 

 

        break;
    case "2":
        var targetCombo = $find('<%= ddlOperator2.ClientID %>');
        break;
}

     thanks.

0
Accepted
Shinu
Top achievements
Rank 2
answered on 08 Sep 2009, 06:46 AM
Hi Duy,

You could use the method get_id() in order to retrieve the id of clicked RadComboBox. See the example shown below.

JavaScript:
 
function OnClientSelectedIndexChanged(sender, eventArgs) 
    var id = sender.get_id()
    if(id=='RadComboBox1'
    { 
        var targetCombo = $find('<%= ddlOperator1.ClientID %>');  
    } 
    else 
    { 
        var targetCombo = $find('<%= ddlOperator2.ClientID %>'); 
    } 
    // Your code...    
}     

-Shinu.
Tags
ComboBox
Asked by
appdev
Top achievements
Rank 1
Answers by
Paul
Telerik team
appdev
Top achievements
Rank 1
Shinu
Top achievements
Rank 2
Share this question
or