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.ItemCreated
If
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