<% @ Page Language = "C #" MasterPageFile = "~ /Site. master "AutoEventWireup =" true "CodeFile =" CascadingComboBoxes. aspx. cs"
Inherits = "GridEditing_CascadingComboBoxes" %>
<Asp: Content ID = "Content1" ContentPlaceHolderID = "ContentHolder" runat = "Server">
<Script type = "text/javascript">
// <! [CDATA [
Function OnCountryChanged (cmbCountry ){
Grid. GetEditor ("City"). Fetch mcallback (cmbCountry. GetValue (). toString ());
}
//]>
</Script>
<Dx: ASPxGridView ID = "grid" ClientInstanceName = "grid" runat = "server" performanceid = "accessperformancemain"
KeyFieldName = "CustomerID" Width = "100%" AutoGenerateColumns = "False" OnCellEditorInitialize = "grid_CellEditorInitialize">
<Settings ShowGroupPanel = "True"/>
<SettingsEditing Mode = "Inline"/>
<Columns>
<Dx: GridViewCommandColumn VisibleIndex = "0">
<EditButton Visible = "True">
</EditButton>
</Dx: GridViewCommandColumn>
<Dx: GridViewDataComboBoxColumn FieldName = "Country" VisibleIndex = "1">
<PropertiesComboBox TextField = "Country" ValueField = "Country" EnableSynchronization = "False"
IncrementalFilteringMode = "StartsWith" performanceid = "accessperformancecountry">
<ClientSideEvents SelectedIndexChanged = "function (s, e) {OnCountryChanged (s) ;}"> </ClientSideEvents>
</PropertiesComboBox>
</Dx: GridViewDataComboBoxColumn>
<Dx: GridViewDataComboBoxColumn FieldName = "City" VisibleIndex = "2">
<PropertiesComboBox EnableSynchronization = "False" IncrementalFilteringMode = "StartsWith"
DropDownStyle = "DropDown">
</PropertiesComboBox>
</Dx: GridViewDataComboBoxColumn>
<Dx: GridViewDataColumn VisibleIndex = "3" FieldName = "ContactName">
</Dx: GridViewDataColumn>
<Dx: GridViewDataColumn VisibleIndex = "4" FieldName = "CompanyName">
</Dx: GridViewDataColumn>
</Columns>
</Dx: ASPxGridView>
<Asp: AccessDataSource ID = "AccessDataSourceMain" runat = "server" DataFile = "~ /App_Data/nwind. mdb"
OnDeleting = "AccessDataSource1_Modifying" OnInserting = "AccessDataSource1_Modifying"
OnUpdating = "AccessDataSource1_Modifying" SelectCommand = "SELECT * FROM [MERs]"
DeleteCommand = "delete from [MERs] WHERE [CustomerID] =? "InsertCommand =" insert into [MERs] ([CustomerID], [CompanyName], [ContactName], [ContactTitle], [Address], [City], [Region], [PostalCode], [Country], [Phone], [Fax]) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "
UpdateCommand = "UPDATE [MERs] SET [CompanyName] = ?, [ContactName] = ?, [City] = ?, [Country] =? WHERE [CustomerID] =? ">
<DeleteParameters>
<Asp: Parameter Name = "CustomerID" Type = "String"/>
</DeleteParameters>
<UpdateParameters>
<Asp: Parameter Name = "CompanyName" Type = "String"/>
<Asp: Parameter Name = "ContactName" Type = "String"/>
<Asp: Parameter Name = "City" Type = "String"/>
<Asp: Parameter Name = "Country" Type = "String"/>
</UpdateParameters>
</Asp: AccessDataSource>
<Asp: AccessDataSource ID = "AccessDataSourceCountry" runat = "server" DataFile = "~ /App_Data/WorldCities. mdb"
SelectCommand = "SELECT * FROM [Countries]"> </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. Configuration;
Using System. Collections;
Using System. Collections. Generic;
Using System. Web;
Using System. Web. Security;
Using System. Web. UI;
Using System. Web. UI. WebControls;
Using System. Web. UI. WebControls. WebParts;
Using System. Web. UI. HtmlControls;
Using DevExpress. Web. ASPxCallbackPanel;
Using DevExpress. Web. ASPxGridView;
Using DevExpress. Web. ASPxEditors;
Using DevExpress. Web. ASPxClasses;
Using DevExpress. Web. Demos;
Public partial class GridEditing_CascadingComboBoxes: Page {
Protected void Page_Load (object sender, EventArgs e ){
If (! IsPostBack ){
Grid. StartEdit (3 );
}
}
Protected void grid_CellEditorInitialize (object sender, ASPxGridViewEditorEventArgs e ){
If (! Grid. IsEditing | e. Column. FieldName! = "City") return;
If (e. KeyValue = DBNull. Value | e. KeyValue = null) return;
Object val = grid. GetRowValuesByKeyValue (e. KeyValue, "Country ");
If (val = DBNull. Value) return;
String country = (string) val;
ASPxComboBox combo = e. Editor as ASPxComboBox;
FillCityCombo (combo, country );
Combo. Callback + = new CallbackEventHandlerBase (cmbCity_OnCallback );
}
Protected void FillCityCombo (ASPxComboBox cmb, string country ){
If (string. IsNullOrEmpty (country) return;
List <string> cities = GetCities (country );
Cmb. Items. Clear ();
Foreach (string city in cities)
Cmb. Items. Add (city );
}
List <string> GetCities (string country ){
List <string> list = new List <string> ();
AccessDataSourceCities. SelectParameters [0]. DefaultValue = country;
DataView view = (DataView) AccessDataSourceCities. Select (DataSourceSelectArguments. Empty );
For (int I = 0; I <view. Count; I ++ ){
List. Add (string) view [I] [0]);
}
Return list;
}
Protected void AccessDataSource1_Modifying (object sender, SqlDataSourceCommandEventArgs e ){
Utils. AssertNotReadOnly ();
}
Void cmbCity_OnCallback (object source, CallbackEventArgsBase e ){
FillCityCombo (source as ASPxComboBox, e. Parameter );
}
}
Http://demos.devexpress.com/ASPxGridViewDemos/GridEditing/CascadingComboBoxes.aspx