The problem that I am having is with the cascading drop down combo box.
When you preset the first, and second drop down with default values or preset values like you would have if a user has to re-edit a form. The second drop drop down will not return the selected value if the user changes the first drop down then selects the second drop down. The value returned is always the value of the first item in the drop-down list.
Example: preset the a country drop down to United States. Then the second to Florida. If the user changes the country to Canada then selects a Canadian region, the value returned will be the first state listed for the United States not the Canadian region selected.
.ascx code
.ascx.vb code
.ascx code
<tr> <td colspan="2" class="t12_BlackBold"><div align="right"> Country: <span class="t12_red">*</span> </div></td> <td class="style1"><div align="left"> <telerik:RadComboBox ID="frm_sCountry_cd" Runat="server" DataTextField="sCountry" DataValueField="sCountry_cd" ErrorMessage="Required field." Skin="Outlook" Width="180px" DropDownWidth="240px" MaxHeight="300px" onclientselectedindexchanged="LoadStates" OnItemsRequested="frm_sCountry_cd_ItemsRequested"> </telerik:RadComboBox><asp:CompareValidator ID="sCountry_cd_VD" runat="server" ValueToCompare="-Select a Country-" Operator="NotEqual" ControlToValidate="frm_sCountry_cd" CssClass="KT_field_error" Font-Bold="True" Display="Dynamic" ErrorMessage="<br />You must select a country."/> </div></td> </tr> <tr> <td colspan="2" class="t12_BlackBold"><div align="right"> State/Region: <span class="t12_red">*</span> </div></td> <td class="style1"><div align="left"> <telerik:RadComboBox ID="frm_sState" Runat="server" DataTextField="sStateDesc" DataValueField="sState" EmptyMessage="-Select State-" ErrorMessage="Required field." Skin="Outlook" Width="180px" MaxHeight="300px" DropDownWidth="200px" OnClientItemsRequested="ItemsLoaded" OnItemsRequested="frm_sState_ItemsRequested" > </telerik:RadComboBox><asp:CompareValidator ID="sState_VD" runat="server" ValueToCompare="-Select State/Region-" Operator="NotEqual" ControlToValidate="frm_sCountry_cd" CssClass="KT_field_error" Font-Bold="True" Display="Dynamic" ErrorMessage="<br />You must select a state/region."/> </div></td> </tr> . . . . <script type="text/javascript"> //global variables for the countries and cities comboboxes var sStatesCombo; function pageLoad() { // initialize the global variables // in this event all client objects // are already created and initialized sStatesCombo = $find("<%= frm_sState.ClientID%>"); function LoadStates(combo, eventArqs) { var item = eventArqs.get_item(); sStatesCombo.set_text("Loading..."); // if a continent is selected if (item.get_index() > 0) { // this will fire the ItemsRequested event of the // countries combobox passing the sCountry_id as a parameter if (sStatesCombo.get_visible == false ) { sStatesCombo.set_visible(true); } sStatesCombo.clearItems(); sStatesCombo.requestItems(item.get_value(), false); sStatesCombo.commitChanges(); items = sStatesCombo.get_items(); if (items.get_count() == 0) { sStatesCombo.set_text("-Select State/Region-"); } else { sStatesCombo.clearItems(); } } else { // the -Select a continent- item was chosen sStatesCombo.set_text("-Select Country first-"); sStatesCombo.clearItems(); } } function ItemsLoaded(combo, eventArqs) { if (combo.get_items().get_count() > 0) { // pre-select the first item combo.set_text(combo.get_items().getItem(0).get_text()); combo.get_items().getItem(0).highlight(); } combo.showDropDown(); } </script>.ascx.vb code
'Code used in updating the values ... 'Setup Country and state drop downs
LoadCountries() frm_sCountry_cd.SelectedValue = sCountry_cd LoadStates(sCountry_cd) If sState <> "" Then frm_sState.SelectedValue = sState ... Protected Sub LoadCountries() Dim connection As New SqlConnection(ConfigurationManager.ConnectionStrings("AAU_StoreCS").ConnectionString) Dim adapter As New SqlDataAdapter("SELECT Value AS sCountry_cd, Text AS sCountry, EntryID AS ParentID, 0 as sOrder FROM Mstr_Lists WHERE (ListName = 'Country') AND (Value = 'US') UNION SELECT Value AS sCountry_cd, Text AS sCountry, EntryID AS ParentID, 1 as sOrder FROM Mstr_Lists AS Mstr_Lists_1 WHERE (ListName = 'Country') Order by sOrder, sCountry", connection) Dim dt As New DataTable() adapter.Fill(dt) frm_sCountry_cd.DataTextField = "sCountry" frm_sCountry_cd.DataValueField = "sCountry_cd" frm_sCountry_cd.DataSource = dt frm_sCountry_cd.DataBind() 'insert the first item frm_sCountry_cd.Items.Insert(0, New RadComboBoxItem("-Select a Country-")) End Sub Protected Sub LoadStates(ByVal sCountry_cd As String) Dim connection As New SqlConnection(ConfigurationManager.ConnectionStrings("AAU_StoreCS").ConnectionString) 'Select states/regions based on the sCountry_cd Dim adapter As New SqlDataAdapter("SELECT Value AS sState, Text AS sStateDesc, ParentID FROM Mstr_Lists WHERE (ListName = 'Region') AND (ParentID = (SELECT EntryID FROM Mstr_Lists AS Mstr_Lists_1 WHERE (ListName = 'Country') AND (Value = @Country_cd))) ORDER BY sStateDesc", connection) adapter.SelectCommand.Parameters.AddWithValue("@Country_cd", sCountry_cd) Dim dt As New DataTable() adapter.Fill(dt) frm_sState.DataTextField = "sStateDesc" frm_sState.DataValueField = "sState" frm_sState.DataSource = dt frm_sState.DataBind() If Not frm_sState.IsEmpty Then frm_sState.Visible = True 'sStateTxt.Visible = False 'insert the first item If sCountry_cd = "US" Then frm_sState.Items.Insert(0, New RadComboBoxItem("-Select State-")) Else frm_sState.Items.Insert(0, New RadComboBoxItem("-Select State/Region-")) End If Else 'frm_sState.Visible = False 'sStateTxt.Visible = True End If End Sub 'Code used to read values during post back. ... Dim sState As String = Left(Replace(frm_sState.SelectedValue.ToString(), "'", "''"), 20) Dim sCountry_cd As String = Left(Replace(frm_sCountry_cd.SelectedValue.ToString, "'", ""), 2) ...