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.