I added a dropdownlist to an autogenerated grid in code behind, however, I am unable to get the selected value when the row is updated. I add the dropdownlist as follows:
protected void grdAssetImport_ItemDataBound(object sender, GridItemEventArgs e){ if (e.Item is GridEditableItem && e.Item.IsInEditMode) { GridEditableItem edit = (GridEditableItem)e.Item; TextBox txt = (TextBox)edit["AssetTypeName"].Controls[0]; txt.Visible = false; DropDownList rddl = new DropDownList(); PortalView.LookupListBO list = LookupListBA.LookupList_GetByKey(DB_Context, "SITE_ASSETTYPE_LIST", UtilityBA.IsActiveChoice.Active); List<PortalView.LookupListItemBO> oList = LookupListBA.LookupListItem_GetList_ByLookupListId(DB_Context, list.LookupListId, (Guid)Current.Employee.SiteId); var AssetList = oList.Select(l => new { AssetTypeName = l.Name }); rddl.ID = "ddlAssetTypeName";
rddl.AutoPostBack = false; rddl.DataSource = AssetList; rddl.DataTextField = "AssetTypeName"; rddl.DataValueField = "AssetTypeName"; rddl.DataBind(); edit["AssetTypeName"].Controls.Add(rddl); }}
I try to use the follow update command, but neither attempt to capture the dropdownlist works and when it gets to the actual column it only sees the textbox in the column and never finds the dropdownlist at all:
protected void grdAssetImport_UpdateCommand(object sender, GridCommandEventArgs e){ GridEditableItem editedItem = e.Item as GridEditableItem; GridEditManager editMan = editedItem.EditManager; foreach (GridColumn column in e.Item.OwnerTableView.RenderColumns) { GridEditableItem editableItem = e.Item as GridEditableItem; DropDownList ddl = editableItem.FindControl("ddlAssetTypeName") as DropDownList; if(ddl != null) { string assetType = ddl.SelectedValue; } DropDownList ddl2 = editableItem["AssetTypeName"].Controls[0] as DropDownList; if(ddl2 != null) { string assetType = ddl.SelectedValue; } if (column is IGridEditableColumn) { IGridEditableColumn editableCol = (column as IGridEditableColumn); if (editableCol.IsEditable) { IGridColumnEditor editor = editMan.GetColumnEditor(editableCol); string editorText = "unknown"; object editorValue = null; if (editor is GridTextColumnEditor) { editorText = (editor as GridTextColumnEditor).Text; editorValue = (editor as GridTextColumnEditor).Text; } if (editor is GridBoolColumnEditor) { editorText = (editor as GridBoolColumnEditor).Value.ToString(); editorValue = (editor as GridBoolColumnEditor).Value; } if (editor is GridDropDownColumnEditor) { editorText = (editor as GridDropDownColumnEditor).SelectedText + "; " + (editor as GridDropDownColumnEditor).SelectedValue; editorValue = (editor as GridDropDownColumnEditor).SelectedValue; } try { DataRow[] changedRows = this.AssetGridDataSource.Select("Id = " + editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["Id"].ToString()); changedRows[0][column.UniqueName] = editorValue; this.AssetGridDataSource.AcceptChanges(); GetSearchColumns(); } catch (Exception ex) { // Label1.Text = "<strong>Unable to set value of column '" + column.UniqueName + "'</strong> - " + ex.Message; e.Canceled = true; break; } } } }}
Any assistance is greatly appreciated as I am on day 4 of trying to get this working.
