Hi,
I'm relatively new to the Radgrid and EntitySpaces. I know that they work extremely well together but I've been stumped for a few hours today with a problem. I've got a rad grid that is bound to an esDataSource, the datasource has a field that is a lookup value. I can bind the grid to the initial datasource and at this stage insertion and editing works fine. However, when I use a template column to add an dropdown control for the look up field (binding it in the ItemDataBound event handler), I can edit values well but when I insert new values though the lookup values are saved as empty values. I cant seem to grab the lookup dropdown value during the insert event.
Any suggestions would be helpful. Sample code or examples would be appriciated.
Here's my code:
<asp:Panel ID="pnlBreadcrumb" runat="server"> </asp:Panel> <asp:Label ID="lblMessage" runat="server" Visible="false" Text="No list configuration found" /> <telerik:RadGrid ID="grdLevelValues" runat="server" GridLines="None" AllowAutomaticInserts="True" AllowAutomaticUpdates="True" DataSourceID="datListValues" AutoGenerateColumns="False" onitemcommand="grdLevelValues_ItemCommand" onitemdatabound="grdLevelValues_ItemDataBound" onitemcreated="grdLevelValues_ItemCreated" AllowSorting="True" AllowPaging="True" PageSize="25" > <HeaderContextMenu EnableAutoScroll="True"></HeaderContextMenu> <MasterTableView datakeynames="IdBusinessUnit" datasourceid="datListValues" CommandItemDisplay="Top" EditMode="InPlace"> <Columns> <telerik:GridBoundColumn DataField="BusinessUnitName" HeaderText="Business Unit" UniqueName="column1"> </telerik:GridBoundColumn> <telerik:GridTemplateColumn UniqueName="State"> <HeaderTemplate> <asp:Label ID="lblStateNameHeader" Text="State Name" runat="server"></asp:Label> </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblStateName" runat="server" Text='<%# Eval("UpToAddressStateItemByIdState.State") %>' /> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="ddlStateName" runat="server"></asp:DropDownList> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridEditCommandColumn></telerik:GridEditCommandColumn> </Columns> <EditFormSettings> <EditColumn UniqueName="EditCommandColumn1"></EditColumn> </EditFormSettings> </MasterTableView> </telerik:RadGrid> <cc1:esDataSource ID="datListValues" runat="server" onescreateentity="datListValues_esCreateEntity" onesselect="datListValues_esSelect" AutoPaging="true" AutoSorting="true"/> code behind:
protected void Page_Load(object sender, EventArgs e) { } protected void grdLevelValues_ItemCommand(object source, GridCommandEventArgs e) { } protected void grdLevelValues_ItemDataBound(object sender, GridItemEventArgs e) { if ((e.Item is GridEditableItem) && e.Item.IsInEditMode) { AddressStateCollection states = new AddressStateCollection(); states.Query.SelectAll(); states.Query.Load(); GridEditableItem gridEditableItem = (GridEditableItem)e.Item; DropDownList dropDownList = (DropDownList)gridEditableItem["State"].FindControl("ddlStateName"); dropDownList.DataSource = states; dropDownList.DataTextField = "State"; dropDownList.DataValueField = "IdState"; //Find the selected index by assuming that the ddl datasource will maintain the order inwhich its items were added. int ddlSelectedIndex =0; foreach(AddressStateItem state in states) { if ((gridEditableItem.DataItem is GridInsertionObject) == false) { if (state.IdState == System.Convert.ToInt32(((Westpac.VOS.Data.BusinessUnitItem)gridEditableItem.DataItem).IdState)) { break; } ddlSelectedIndex ++; } else break; } dropDownList.SelectedIndex = ddlSelectedIndex; dropDownList.DataBind(); } } protected void grdLevelValues_ItemCreated(object sender, GridItemEventArgs e) { if (e.Item is GridEditableItem && e.Item.IsInEditMode) { GridEditableItem item = e.Item as GridEditableItem; //validation code goes here... } } protected void datListValues_esSelect(object sender, EntitySpaces.Web.esDataSourceSelectEventArgs e) { BusinessUnitCollection values = new BusinessUnitCollection(); values.Query.SelectAll(); values.Query.Load(); e.Collection = values; } protected void datListValues_esCreateEntity(object sender, EntitySpaces.Web.esDataSourceCreateEntityEventArgs e) { BusinessUnitItem entity = new BusinessUnitItem(); // Insert if (e.PrimaryKeys == null) // A new record to be created { entity.AddNew(); entity.IdBrand = VosContext.Current.Brand.Id; foreach (GridDataItem item in this.grdLevelValues.Items) { DropDownList dropDownList = (DropDownList)item["State"].FindControl("ddlStateName"); if (dropDownList != null) { entity.IdState = System.Convert.ToInt32(dropDownList.SelectedValue); } } } else // Update { entity.LoadByPrimaryKey((int)e.PrimaryKeys[0]); foreach (GridDataItem item in this.grdLevelValues.Items) { DropDownList dropDownList = (DropDownList)item["State"].FindControl("ddlStateName"); if (dropDownList != null) { entity.IdState = System.Convert.ToInt32(dropDownList.SelectedValue); } } } e.Entity = entity; }