So I've been Googling this and have found various articles pertaining to it, but none of the solutions seem to work. The screen I'm working on has a grid view for vehicle listings. When a listing is edited, the user can edit the Vehicle Type, Manufacturer & Model.
When a user selects Vehicle Type, the Manufacturer DropDownList will rebind, when a user selects a Manufacturer, the Model DropDownList will rebind. Unfortunately, I keep getting this error: 'DropDownList2' has a SelectedValue which is invalid because it does not exist in the list of items.
Maybe I have the binding order mixed up. Here is my code:
Any suggestions at all?
When a user selects Vehicle Type, the Manufacturer DropDownList will rebind, when a user selects a Manufacturer, the Model DropDownList will rebind. Unfortunately, I keep getting this error: 'DropDownList2' has a SelectedValue which is invalid because it does not exist in the list of items.
Maybe I have the binding order mixed up. Here is my code:
<telerik:RadGrid ID="radVehicleListingGrid" runat="server" AllowAutomaticDeletes="True" AllowAutomaticUpdates="True" CssClass="AdminGridView" DataSourceID="sdsVehicleListings" GridLines="None" Skin=""> <AlternatingItemStyle CssClass="AltRow" /> <MasterTableView AutoGenerateColumns="False" DataSourceID="sdsVehicleListings" EditMode="PopUp" DataKeyNames="ListingID"> <EditFormSettings CaptionDataField="ListingID" CaptionFormatString="Edit Note" EditColumn-CancelImageUrl="/Images/System-Icons/SysIco-Close.png" EditColumn-UpdateText="Save Changes" EditFormType="Template" FormCaptionStyle-CssClass="AdminEditFormCaption" FormMainTableStyle-CssClass="AdminEditFormMainTable" FormStyle-CssClass="AdminEditForm" PopUpSettings-Modal="true" PopUpSettings-Width="650px"> <EditColumn UpdateText="Save Changes" CancelImageUrl="/Images/System-Icons/SysIco-Close.png"> </EditColumn> <FormStyle CssClass="AdminEditForm"></FormStyle> <FormMainTableStyle CssClass="AdminEditFormMainTable"></FormMainTableStyle> <FormCaptionStyle CssClass="AdminEditFormCaption"></FormCaptionStyle> <FormTemplate> <asp:Panel ID="pnlAdminEditForm" runat="server" DefaultButton="btnSaveListingChanges"> <table border="0" cellpadding="0" cellspacing="0" class="AdminEditFormMainTable" rules="rows" style="table-layout: auto; empty-cells: show;"> <tbody> <tr class="Row"> <td width="125px"> Vehicle Type: </td> <td> <asp:DropDownList ID="DropDownList3" runat="server" AppendDataBoundItems="True" SelectedValue='<%# Bind("VehicleTypeID") %>' DataSourceID="sdsEditVehicleTypes" DataTextField="VehicleType" DataValueField="VehicleTypeiD" OnSelectedIndexChanged="EditVehicleType_SelectedIndexChange" AutoPostBack="True"> <asp:ListItem Value="0">Select a vehicle type...</asp:ListItem> </asp:DropDownList> <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="DropDownList3" ErrorMessage="Please select a vehicle type."></asp:RequiredFieldValidator> <asp:ValidatorCalloutExtender ID="RequiredFieldValidator4_ValidatorCalloutExtender" runat="server" Enabled="True" TargetControlID="RequiredFieldValidator4"> </asp:ValidatorCalloutExtender> </td> </tr> <tr class="AltRow"> <td> Year: </td> <td> <asp:TextBox ID="txtEditVehicleYear" runat="server" Text='<%# Bind("VehicleYear") %>' ValidationGroup="EditListing"></asp:TextBox> </td> </tr> <tr class="Row"> <td width="125px"> Manufacturer: </td> <td> <asp:DropDownList ID="DropDownList2" runat="server" AppendDataBoundItems="True" SelectedValue='<%# Bind("ManufacturerID") %>' DataSourceID="sdsEditManufacturers" DataTextField="Manufacturer" DataValueField="ManufacturerID" OnDataBinding="EditManufacturer_Databinding" OnDataBound="EditManufacturer_DataBound" OnSelectedIndexChanged="EditManufacturer_SelectedIndexChange" AutoPostBack="True" Visible="False"> <asp:ListItem Value="0">Select a manufacturer...</asp:ListItem> </asp:DropDownList> <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="DropDownList2" ErrorMessage="Please select a manufacturer."></asp:RequiredFieldValidator> <asp:ValidatorCalloutExtender ID="RequiredFieldValidator3_ValidatorCalloutExtender" runat="server" Enabled="True" TargetControlID="RequiredFieldValidator3"> </asp:ValidatorCalloutExtender> </td> </tr> <tr class="AltRow"> <td> Model: </td> <td> <asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="True" SelectedValue='<%# Bind("ModelID") %>' DataSourceID="sdsEditModels" DataTextField="Model" DataValueField="ModelID" OnDataBinding="EditModel_DataBinding" OnDataBound="EditModel_DataBound"> <asp:ListItem Value="0">Select a model...</asp:ListItem> </asp:DropDownList> </td> </tr> <tr class="Row"> <td> Public Price: </td> <td> <asp:TextBox ID="txtEditPublicPrice" runat="server" Text='<%# Bind("PublicPrice", "{0:f2}") %>' ValidationGroup="EditListing"></asp:TextBox> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtEditPublicPrice" Display="None" ErrorMessage="Please enter a valid decimal amount with no extra symbols." ValidationGroup="EditListing" ValidationExpression="[0-9]+(\.[0-9][0-9]?)?"></asp:RegularExpressionValidator> <asp:ValidatorCalloutExtender ID="RegularExpressionValidator1_ValidatorCalloutExtender" runat="server" Enabled="True" TargetControlID="RegularExpressionValidator1"> </asp:ValidatorCalloutExtender> </td> </tr> <tr class="AltRow"> <td width="125px"> Dealer Price: </td> <td> <asp:TextBox ID="txtEditDealerPrice" runat="server" Text='<%# Bind("DealerPrice", "{0:f2}") %>' ValidationGroup="EditListing"></asp:TextBox> <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ControlToValidate="txtEditDealerPrice" Display="None" ErrorMessage="Please enter a valid decimal amount with no extra symbols." ValidationGroup="EditListing" ValidationExpression="[0-9]+(\.[0-9][0-9]?)?"></asp:RegularExpressionValidator> <asp:ValidatorCalloutExtender ID="RegularExpressionValidator2_ValidatorCalloutExtender" runat="server" Enabled="True" TargetControlID="RegularExpressionValidator2"> </asp:ValidatorCalloutExtender> </td> </tr> <tr class="Row"> <td> Show Listing: </td> <td> <asp:CheckBox ID="chkEditPublicListing" runat="server" Checked='<%# Bind("PublicListing") %>' ValidationGroup="EditListing" /> </td> </tr> <tr class="AltRow"> <td width="125px"> Description: </td> <td> <asp:TextBox ID="txtEditDescription" runat="server" Text='<%# Bind("Description") %>' Rows="5" TextMode="MultiLine" Width="400px" ValidationGroup="EditListing"></asp:TextBox> </td> </tr> <tr class="Row"> <td colspan="2"> <asp:LinkButton ID="btnSaveListingChanges" runat="server" CommandArgument='<%# Bind("ListingID") %>' CommandName="Update" CssClass="SaveLinkButton" ValidationGroup="EditNoteDate">Save Changes</asp:LinkButton> <asp:LinkButton ID="btnCancelEditClinicDate" runat="server" CausesValidation="false" CommandName="Cancel" CssClass="CancelLinkButton">Cancel</asp:LinkButton> </td> </tr> </tbody> </table> </asp:Panel> </FormTemplate> <PopUpSettings Modal="True" Width="650px"></PopUpSettings> </EditFormSettings> <Columns> <telerik:GridBoundColumn DataField="VehicleType" HeaderText="Vehicle Type" SortExpression="VehicleType" UniqueName="VehicleType"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="VehicleYear" HeaderText="Year" SortExpression="Year" UniqueName="VehicleYear"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Manufacturer" HeaderText="Manufacturer" SortExpression="Manufacturer" UniqueName="Manufacturer"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Model" HeaderText="Model" SortExpression="Model" UniqueName="Model"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="PublicPrice" DataType="System.Decimal" HeaderText="Public Price" SortExpression="PublicPrice" UniqueName="PublicPrice" DataFormatString="{0:c}"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="DealerPrice" DataType="System.Decimal" HeaderText="Dealer Price" SortExpression="DealerPrice" UniqueName="DealerPrice" DataFormatString="{0:c}"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="PublicListing" HeaderText="Listed?" UniqueName="PublicListing" DataFormatString="<img src='/images/system-icons/tf/{0}.png' />" ItemStyle-HorizontalAlign="Center"> <ItemStyle HorizontalAlign="Center"></ItemStyle> </telerik:GridBoundColumn> <telerik:GridTemplateColumn UniqueName="TemplateColumn"> <ItemTemplate> <asp:LinkButton ID="btnEditListing" runat="server" CausesValidation="false" CommandName="Edit" CssClass="EditLinkButton" Text="Edit"></asp:LinkButton> <asp:HyperLink ID="lnkEditPhotos" CssClass="ImageLinkButton" NavigateUrl='<%# Eval("ListingID", "photos?lid={0}") %>' runat="server">Photos</asp:HyperLink> <asp:HyperLink ID="lnkEditSpecs" CssClass="SpecLinkButton" NavigateUrl='<%# Eval("ListingID", "specs?lid={0}") %>' runat="server">Specs</asp:HyperLink> <asp:LinkButton ID="btnRemoveListing" runat="server" CausesValidation="false" CommandArgument='<%# Eval("ListingID") %>' CommandName="Delete" CssClass="DeleteLinkButton" OnClientClick="javascript:return confirm('Are you sure you want to remove this this listing?');" Text="Remove"></asp:LinkButton> </ItemTemplate> <ItemStyle HorizontalAlign="Right" /> </telerik:GridTemplateColumn> </Columns> <NoRecordsTemplate> You currently have no listings in the system.</NoRecordsTemplate> </MasterTableView><HeaderStyle CssClass="Header" /> <ItemStyle CssClass="Row" /></telerik:RadGrid><asp:SqlDataSource ID="sdsEditVehicleTypes" runat="server" ConnectionString="<%$ ConnectionStrings:SqlConnection %>" SelectCommand="SELECT * FROM [Vehicle Types] ORDER BY [VehicleType]"></asp:SqlDataSource><asp:SqlDataSource ID="sdsEditManufacturers" runat="server" ConnectionString="<%$ ConnectionStrings:SqlConnection %>" SelectCommand="SELECT * FROM [Manufacturers] WHERE ([VehicleTypeID] = @VehicleTypeID) ORDER BY [Manufacturer]"> <SelectParameters> <asp:Parameter Name="VehicleTypeID" Type="Int32" /> </SelectParameters></asp:SqlDataSource><asp:SqlDataSource ID="sdsEditModels" runat="server" ConnectionString="<%$ ConnectionStrings:SqlConnection %>" SelectCommand="SELECT * FROM [Models] WHERE ([Model] = @Model) ORDER BY [Model]"> <SelectParameters> <asp:Parameter Name="Model" Type="String" /> </SelectParameters></asp:SqlDataSource><asp:SqlDataSource ID="sdsVehicleListings" runat="server" ConnectionString="<%$ ConnectionStrings:SqlConnection %>" SelectCommand="SELECT * FROM [Detailed Vehicle Listings] WHERE ([DealerID] = @DealerID) AND ([Active] = 1) ORDER BY [DateTimeAdded]" DeleteCommand="UPDATE Listings SET Active = 0 WHERE (ListingID = @ListingID)" UpdateCommand="UPDATE Listings SET PublicListing = @PublicListing, VehicleTypeID = @VehicleTypeID, VehicleYear = @VehicleYear, ManufacturerID = @ManufacturerID, ModelID = @ModelID, Description = @Description, PublicPrice = @PublicPrice, DealerPrice = @DealerPrice WHERE ListingID = @ListingID"> <DeleteParameters> <asp:Parameter Name="ListingID" Type="Int32" /> </DeleteParameters> <SelectParameters> <asp:SessionParameter Name="DealerID" SessionField="DealerID" Type="Int32" /> </SelectParameters> <UpdateParameters> <asp:Parameter Name="ListingID" Type="Int32" /> <asp:Parameter Name="VehicleTypeID" Type="Int32" /> <asp:Parameter Name="VehicleYear" Type="String" /> <asp:Parameter Name="ManufacturerID" Type="Int32" /> <asp:Parameter Name="ModelID" Type="Int32" /> <asp:Parameter Name="Description" Type="String" /> <asp:Parameter Name="PublicPrice" Type="Decimal" /> <asp:Parameter Name="DealerPrice" Type="Decimal" /> <asp:Parameter Name="PublicListing" Type="Boolean" /> </UpdateParameters></asp:SqlDataSource>Protected Sub radVehicleListingGrid_ItemDataBound(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles radVehicleListingGrid.ItemDataBound If (TypeOf e.Item Is GridEditableItem AndAlso e.Item.IsInEditMode) Then Dim item As GridEditableItem = e.Item 'access/modify the edit item template settings here Dim ddlEditVehicleTypes As DropDownList = item.FindControl("DropDownList3") Dim ddlEditManufacturers As DropDownList = item.FindControl("DropDownList2") Dim ddlEditModels As DropDownList = item.FindControl("DropDownList1") sdsEditManufacturers.SelectParameters("VehicleTypeID").DefaultValue = ddlEditVehicleTypes.SelectedValue sdsEditModels.SelectParameters("ManufacturerID").DefaultValue = ddlEditManufacturers.SelectedValue sdsEditManufacturers.DataBind() sdsEditModels.DataBind() ElseIf (TypeOf e.Item Is GridDataItem AndAlso Not e.Item.IsInEditMode AndAlso Page.IsPostBack) Then End If End SubAny suggestions at all?