Hello,
I have seen this topic in many different forum posts and demos on the site and I have tried so many different things I am just totally confused about how to make this work.
I have a RadGrid in which I am doing Inserts and Updates through an ObjectDataSource. In the FormTemplate among other controls I have two dropdownlists that are both populated by their own ObjectDataSources. The SelectParameter of the second dropdownlist is the selectedvalue from the first dropdownlist. Before I converted this page into a RadGrid I simply used a ControlParameter for the ObjectDataSource of the second dropdownlist referencing the first one. Now it seems that I can't do that within the FormTemplate of the grid for multiple reasons.
So what I need to accomplish is the following:
1. I want the dropdowns to show the correct item as selected when that item is "edited".
2. I want the second dropdown to be repopulated with the correct items when the first dropdown is changed.
3. I want the correct item saved to the database on insert and update.
These are pretty obvious but at this point I'm not sure what I need to do to make that happen.
Here is the important snippet of my aspx code:
So on an edit/update command this works. It displays the correct item as selected in the second dropdownlist. I am fine here because I actually set enable=false on an edit because they are not allowed to edit that field so I don't have to worry about changing the first dropdownlist and repopulating the second.
But the problem is on an insert. When I try to add a new entry I immediately get an error that the second dropdownlist has a SelectedValue that is invalid because it doesn't exist in the list of items.
Maybe this is because I am setting the default empty value (or in my case 0)?
Here are the important parts of my codebehind:
I had tried moving the populating of the second dropdown to the SelectedIndexChanged of the first dropdownlist (as you see commented out) but that causes the problem that when it tries to save it doesn't save the item to the database because I had to remove the SelectedValue='<%# Bind("Position_ID") %>' for the aspx page because of another error.
Someone please help me to figure out the best way to accomplish this. Do I need to do the entire thing in code including the insert/update tot he database instead of letting the grid do it?
thanks,
Steve
I have seen this topic in many different forum posts and demos on the site and I have tried so many different things I am just totally confused about how to make this work.
I have a RadGrid in which I am doing Inserts and Updates through an ObjectDataSource. In the FormTemplate among other controls I have two dropdownlists that are both populated by their own ObjectDataSources. The SelectParameter of the second dropdownlist is the selectedvalue from the first dropdownlist. Before I converted this page into a RadGrid I simply used a ControlParameter for the ObjectDataSource of the second dropdownlist referencing the first one. Now it seems that I can't do that within the FormTemplate of the grid for multiple reasons.
So what I need to accomplish is the following:
1. I want the dropdowns to show the correct item as selected when that item is "edited".
2. I want the second dropdown to be repopulated with the correct items when the first dropdown is changed.
3. I want the correct item saved to the database on insert and update.
These are pretty obvious but at this point I'm not sure what I need to do to make that happen.
Here is the important snippet of my aspx code:
<FormTemplate> <asp:Panel ID="pnlEditPanel" runat="server" DefaultButton="btnUpdate" CssClass="edit_panel" TabIndex="100"> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td>Group:</td> <td> <asp:ObjectDataSource ID="odsGroupList" runat="server" SelectMethod="dsGroupList" TypeName="NUFOLibrary.CMembers"> <SelectParameters> <asp:SessionParameter Name="sUserID" SessionField="UserID" Type="String" /> <asp:Parameter Name="sPublic" DefaultValue="0" Type="String" /> </SelectParameters> </asp:ObjectDataSource> <asp:DropDownList ID="lstGroups" runat="server" DataSourceID="odsGroupList" DataTextField="Group" DataValueField="ID" AutoPostBack="True" AppendDataBoundItems="true" OnSelectedIndexChanged="lstGroups_SelectedIndexChanged" SelectedValue='<%# Bind("Group_ID") %>'> <asp:ListItem Value="0" Text="(Select One)" /> </asp:DropDownList> </td> </tr> <tr> <td>Position:</td> <td> <asp:ObjectDataSource ID="odsPositionList" runat="server" SelectMethod="dsPositionList" TypeName="NUFOLibrary.CMembers"> <SelectParameters> <asp:SessionParameter Name="sUserID" SessionField="UserID" Type="String" /> <asp:ControlParameter Name="sGroupID" ControlID="lstGroups" Type="String" /> </SelectParameters> </asp:ObjectDataSource> <asp:DropDownList ID="lstPositions" runat="server" DataSourceID="odsPositionList" DataTextField="Position" DataValueField="ID" SelectedValue='<%# Bind("Position_ID") %>'> <asp:ListItem Value="0" Text="(Select One)" /> </asp:DropDownList> </td> </tr>So on an edit/update command this works. It displays the correct item as selected in the second dropdownlist. I am fine here because I actually set enable=false on an edit because they are not allowed to edit that field so I don't have to worry about changing the first dropdownlist and repopulating the second.
But the problem is on an insert. When I try to add a new entry I immediately get an error that the second dropdownlist has a SelectedValue that is invalid because it doesn't exist in the list of items.
Maybe this is because I am setting the default empty value (or in my case 0)?
Here are the important parts of my codebehind:
Protected Sub gvMembers_ItemCommand(ByVal source As Object, ByVal e As GridCommandEventArgs) Handles gvMembers.ItemCommand If (e.CommandName = RadGrid.InitInsertCommandName) Then e.Canceled = True Dim newValues As System.Collections.Specialized.ListDictionary = New System.Collections.Specialized.ListDictionary() newValues("Group_ID") = "0" newValues("Facility_ID") = "0" newValues("Position_ID") = "0" e.Item.OwnerTableView.InsertItem(newValues) End If End Sub Private Sub gvMembers_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles gvMembers.ItemDataBound If e.Item.DataItem Is Nothing Then Exit Sub If "Membership".Equals(e.Item.OwnerTableView.Name) Then If (TypeOf e.Item Is GridEditFormItem AndAlso e.Item.IsInEditMode) Then Dim editFormItem As GridEditFormItem = CType(e.Item, GridEditFormItem) DirectCast(editFormItem.FindControl("lstGroups"), DropDownList).Enabled = False DirectCast(editFormItem.FindControl("lstFacilities"), DropDownList).Enabled = False DirectCast(editFormItem.FindControl("lstPositions"), DropDownList).Enabled = False DirectCast(editFormItem.FindControl("rdpStartDate"), RadDatePicker).Enabled = False DirectCast(editFormItem.FindControl("rdpEndDate"), RadDatePicker).Enabled = True End If If (TypeOf e.Item Is GridEditFormInsertItem) AndAlso (e.Item.OwnerTableView.IsItemInserted) Then Dim editFormItem As GridEditFormItem = CType(e.Item, GridEditFormItem) DirectCast(editFormItem.FindControl("lstGroups"), DropDownList).Enabled = True DirectCast(editFormItem.FindControl("lstFacilities"), DropDownList).Enabled = True DirectCast(editFormItem.FindControl("lstPositions"), DropDownList).Enabled = True DirectCast(editFormItem.FindControl("rdpStartDate"), RadDatePicker).Enabled = True DirectCast(editFormItem.FindControl("rdpEndDate"), RadDatePicker).Enabled = True End If End If End Sub Protected Sub lstGroups_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Dim lstGroups As DropDownList = DirectCast(sender, DropDownList) Dim editItem As GridEditFormItem = DirectCast(lstGroups.NamingContainer, GridEditFormItem) Dim lstFacilities As DropDownList = DirectCast(editItem.FindControl("lstFacilities"), DropDownList) Dim lstPositions As DropDownList = DirectCast(editItem.FindControl("lstPositions"), DropDownList) Dim rdpStartDate As RadDatePicker = DirectCast(editItem.FindControl("rdpStartDate"), RadDatePicker) Dim rdpEndDate As RadDatePicker = DirectCast(editItem.FindControl("rdpEndDate"), RadDatePicker) 'Dim odsPositionList = New ObjectDataSource 'odsPositionList.ID = "odsPositionList" 'odsPositionList.SelectMethod = "dsPositionList" 'odsPositionList.TypeName = "NUFOLibrary.CMembers" 'odsPositionList.SelectParameters.Add(New Parameter("sUserID", TypeCode.String, HttpContext.Current.Session("UserID").ToString)) 'odsPositionList.SelectParameters.Add(New Parameter("sGroupID", TypeCode.String, lstGroups.SelectedValue)) 'lstPositions.DataSource = odsPositionList 'lstPositions.DataBind() If lstGroups.SelectedValue = "3" Then lstFacilities.Enabled = False Else lstFacilities.Enabled = True End If If lstGroups.SelectedValue = "4" Then rdpStartDate.DbSelectedDate = "" Else rdpStartDate.DbSelectedDate = Now().ToString End If rdpEndDate.DbSelectedDate = "" End SubI had tried moving the populating of the second dropdown to the SelectedIndexChanged of the first dropdownlist (as you see commented out) but that causes the problem that when it tries to save it doesn't save the item to the database because I had to remove the SelectedValue='<%# Bind("Position_ID") %>' for the aspx page because of another error.
Someone please help me to figure out the best way to accomplish this. Do I need to do the entire thing in code including the insert/update tot he database instead of letting the grid do it?
thanks,
Steve