I'm having a logic issue. I have some Comboboxes that I need to cascade while in Edit or Insert Mode. The problem is when I Bind the second Combo based on the first, the entire Grid does a PostBack and so the Combos rebind again.
I know i'm likely just missing an 'If Postback' or something, but my brain is mush right now.
I know i'm likely just missing an 'If Postback' or something, but my brain is mush right now.
<telerik:RadGrid ID="RecipientsGrid" runat="server" AutoGenerateColumns="false" EnableViewState="true" PageSize="5" AllowFilteringByColumn="true" AllowPaging="true" AllowSorting="True">
<EditFormSettings EditFormType="Template">
<FormTemplate>
<telerik:RadComboBox ID="CountryCombo" runat="server">
</telerik:RadComboBox>
<telerik:RadComboBox ID="ProvinceCombo" runat="server" Width="325" >
</telerik:RadComboBox>
</FormTemplate>
</EditFormSettings>
</telerik:RadGrid>
Private Sub RecipientsGrid_ItemDataBound(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles RecipientsGrid.ItemDataBound If TypeOf e.Item Is GridEditFormItem AndAlso e.Item.IsInEditMode Then Dim editItem As GridEditFormItem = DirectCast(e.Item, GridEditFormItem) Dim ProvinceCombo As RadComboBox = TryCast(editItem.FindControl("ProvinceCombo"), RadComboBox) Dim CountryCombo As RadComboBox = TryCast(editItem.FindControl("CountryCombo"), RadComboBox) Dim CityCombo As RadComboBox = TryCast(editItem.FindControl("CityCombo"), RadComboBox) '** Populate ComboBoxes and define their Default Value Using context As New DataEntities With CountryCombo .DataValueField = "CountryId" .DataTextField = "CountryName" .DataSource = context.Countries.OrderBy(Function(x) x.displayOrder).ToList End With CountryCombo.Width = Unit.Pixel(320) CountryCombo.DataBind() End Using Using context As New DataEntities With ProvinceCombo .DataValueField = "ProvinceId" .DataTextField = "NameEnglish" .DataSource = context.Provinces.Where(Function(x) x.CountryId = CountryId).OrderBy(Function(x) x.NameEnglish).ToList End With ProvinceCombo.Width = Unit.Pixel(320) ProvinceCombo.DataBind() End Using Using context As New DataEntities With CityCombo .DataValueField = "CityId" .DataTextField = "CityName" .DataSource = context.Cities.Where(Function(x) x.ProvinceID = ProvinceId).OrderBy(Function(x) x.CityName).ToList End With CityCombo.Width = Unit.Pixel(320) CityCombo.DataBind() End Using SetComboBoxDefault(CountryId, CountryCombo, "Country") SetComboBoxDefault(ProvinceId, ProvinceCombo, "Province/State") SetComboBoxDefault(CityId, CityCombo, "City") End If End Sub Public Sub SetComboBoxDefault(ByVal FindItemByValue As Integer, ByVal Control As RadComboBox, ByVal DisplayText As String) Dim ComboBoxItem As RadComboBoxItem If FindItemByValue >0 Then ComboBoxItem = Control.FindItemByValue(FindItemByValue) ComboBoxItem.Selected = True Else Control.Items.Insert(0, New RadComboBoxItem("-- Please select a " & DisplayText & " --", String.Empty)) End If End Sub Private Sub RecipientsGrid_ItemCreated(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles RecipientsGrid.ItemCreatedIf TypeOf e.Item Is GridEditFormItem AndAlso e.Item.IsInEditMode Then 'if the item is in edit mode Dim editItem As GridEditFormItem = DirectCast(e.Item, GridEditFormItem) Dim CountryCombo As RadComboBox = DirectCast(editItem.FindControl("CountryCombo"), RadComboBox) CountryCombo.AutoPostBack = True AddHandler CountryCombo.SelectedIndexChanged, AddressOf CountryCombo_SelectedIndexChanged End If End Sub Protected Sub CountryCombo_SelectedIndexChanged(ByVal sender As Object, ByVal e As RadComboBoxSelectedIndexChangedEventArgs) If RecipientsGrid.MasterTableView.IsItemInserted <> False Then Dim insertItem As GridEditFormInsertItem = DirectCast(TryCast(sender, DropDownList).NamingContainer, GridEditFormInsertItem) Dim ddlList As DropDownList = DirectCast(insertItem.FindControl("Dropdownlist2"), DropDownList) Else Dim CountryCombo As RadComboBox = DirectCast(sender, RadComboBox) Dim editedItem As GridEditableItem = DirectCast(TryCast(sender, RadComboBox).NamingContainer, GridEditableItem) Dim ProvinceCombo As RadComboBox = DirectCast(editedItem.FindControl("ProvinceCombo"), RadComboBox) Using context As New DataEntities With ProvinceCombo .DataValueField = "ProvinceId" .DataTextField = "NameEnglish" .DataSource = context.Provinces.Where(Function(x) x.CountryId = e.Value).OrderBy(Function(x) x.NameEnglish).ToList End With ProvinceCombo.Width = Unit.Pixel(320) ProvinceCombo.DataBind() End Using End If End Sub