<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="ClientAPI.aspx.cs" Inherits="ASPxComboBox_ClientAPI" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentHolder" runat="Server"> <script type="text/javascript"> // <![CDATA[ var lastCountry = null; function OnCountryChanged(cmbCountry) { if (cmbCity.InCallback() ) { lastCountry = cmbCountry.GetValue().toString(); } else { cmbCity.PerformCallback(cmbCountry.GetValue().toString()); } } function OnEndCallback(s,e){ if (lastCountry){ cmbCity.PerformCallback(lastCountry); lastCountry = null; } } // ]]> </script> <table class="OptionsTable"> <tr> <td> <dx:ASPxLabel runat="server" Text="Country:" ID="CountryLabel" AssociatedControlID="CmbCountry" /> </td> <td> <dx:ASPxComboBox runat="server" ID="CmbCountry" DropDownStyle="DropDownList" IncrementalFilteringMode="StartsWith" DataSourceID="AccessDataSourceCountry" TextField="Country" ValueField="Country" EnableSynchronization="False"> <ClientSideEvents SelectedIndexChanged="function(s, e) { OnCountryChanged(s); }" /> </dx:ASPxComboBox> </td> <td class="LeftPadding"> <dx:ASPxLabel runat="server" Text="City:" ID="ASPxLabel1" AssociatedControlID="CmbCity" /> </td> <td> <dx:ASPxComboBox runat="server" ID="CmbCity" ClientInstanceName="cmbCity" OnCallback="CmbCity_Callback" DropDownStyle="DropDown" DataSourceID="AccessDataSourceCities" TextField="City" ValueField="City" IncrementalFilteringMode="StartsWith" EnableSynchronization="False"> <ClientSideEvents EndCallback=" OnEndCallback"/> </dx:ASPxComboBox> </td> </tr> </table> <asp:AccessDataSource ID="AccessDataSourceCountry" runat="server" DataFile="~/App_Data/WorldCities.mdb" SelectCommand="SELECT cr.Country, c.City as Capital FROM [Cities] c, [Countries] cr WHERE c.CityId = cr.CapitalId order by cr.Country"> </asp:AccessDataSource> <asp:AccessDataSource ID="AccessDataSourceCities" runat="server" DataFile="~/App_Data/WorldCities.mdb" SelectCommand="SELECT c.City FROM [Cities] c, [Countries] cr WHERE (c.CountryId = cr.CountryId) AND (cr.Country = ?) order by c.City"> <SelectParameters> <asp:Parameter Name="?" /> </SelectParameters> </asp:AccessDataSource> </asp:Content>
using System; using System.Data; using System.Web.UI; using DevExpress.Web.ASPxClasses; public partial class ASPxComboBox_ClientAPI : Page { protected void Page_Load(object sender, EventArgs e) { if (!IsCallback) { CmbCountry.Value = "Mexico"; FillCityCombo("Mexico"); } } protected void CmbCity_Callback(object source, CallbackEventArgsBase e) { FillCityCombo(e.Parameter); } protected void FillCityCombo(string country) { if (string.IsNullOrEmpty(country)) return; AccessDataSourceCities.SelectParameters[0].DefaultValue = country; CmbCity.DataBind(); // Select the current country capital in the CmbCity DataTable table = ((DataView)AccessDataSourceCountry.Select(DataSourceSelectArguments.Empty)).Table; DataRow[] foundRows = table.Select(string.Format("Country = '{0}'", country)); if(foundRows.Length > 0) CmbCity.Value = (string)foundRows[0]["Capital"]; } }