asp.net - ListBox.ListItem.Selected always returns false -
this going take little while explain, here goes:
1) created .aspx page placeholder control.
2) use page load "container" usercontrol db:
protected override void oninit(eventargs e) { base.oninit(e); try { utility.menuitem menuitem = currentmenuhandler.bycurrentpath(); var clientid = currentclient.id; var userid = currentuser.id; if (menuitem.usercontrolpath.length > 0) { usercontrol control = base.loadcontrol(menuitem.usercontrolpath, 2, clientid, userid, menuitem.id); plcontainercontrol.controls.add(control); } } catch (exception ex) { response.write(ex.tostring()); } }
3) in container control, i'm using devexpress gridview dynamically load user controls when gridview goes "edit" mode.
protected override void oninit(eventargs e) { base.oninit(e); //grab business objects factory gridbusobj = utility.griditembf.getbusobject(base.clientid, productcode); corebusobj = utility.corebf.getbusobject(); //load data database objects loaddata(); populatecolumns(); grid.settingsediting.mode = gridvieweditingmode.popupeditform; grid.htmlrowcreated += gridhtmlrowcreated; grid.htmleditformcreated+= gridhtmleditformcreated; grid.templates.editform = new editformtemplate(applicationid, clientid, userid, menuid, page, gridcolumns, cores); grid.settingsediting.popupeditformmodal = true; bindgrid(); } public class editformtemplate : itemplate { public ilist<igridable> gridcolumns { get; set; } private int applicationid { get; set; } private int clientid { get; set; } private int userid { get; set; } private int menuitemid { get; set; } private page currentpage { get; set; } private ilist<core> cores; public editformtemplate(int applicationid, int clientid, int userid, int menuitemid, page currentpage, ilist<igridable> gridcolumns, ilist<core> cores) { gridcolumns = gridcolumns; applicationid = applicationid; clientid = clientid; userid = userid; menuitemid = menuitemid; currentpage = currentpage; cores = cores; } #region itemplate members public void instantiatein(control container) { var formcontainer = new system.web.ui.webcontrols.panel {cssclass = "form-container"}; var corecolumn = new htmlgenericcontrol("div"); var corefilter = new htmlgenericcontrol("div"); var title = new htmlgenericcontrol("h2") {innerhtml = "core name"}; corecolumn.attributes.add("class", "filter-column"); corefilter.attributes.add("class", "filter"); var gridcontainer = (gridvieweditformtemplatecontainer)container; var coreid = (int) gridcontainer.keyvalue; var core = (cores.where(c => c.coreid == coreid)).first(); var txtcorename = new system.web.ui.webcontrols.textbox {id = "txtcorename", text = core.corename}; corefilter.controls.add(title); corefilter.controls.add(txtcorename); corecolumn.controls.add(corefilter); formcontainer.controls.add(corecolumn); formcontainer.controls.add(new literalcontrol(@"<div class=""clearfix""> </div>")); (int index = 0; index < gridcolumns.count; index++) { igridable griditem = gridcolumns[index]; igridable lastgriditem = gridcolumns[index == 0 ? index : index - 1]; if (griditem gridparameter) { usercontrol childcontroltemplate = loadcontrol(griditem.usercontrolpath, applicationid, clientid, userid, menuitemid, griditem); childcontroltemplate.id = griditem.paramname; var lastrowindex = math.floor((decimal)((decimal)lastgriditem.sortorder / (decimal)10.0)); var currentrowindex = math.floor((decimal) ((decimal) griditem.sortorder/(decimal) 10.0)); if (lastrowindex < currentrowindex ) formcontainer.controls.add(new literalcontrol(@"<div class=""clearfix""> </div>")); formcontainer.controls.add(childcontroltemplate); } } var updatelink = new aspxgridviewtemplatereplacement { replacementtype = gridviewtemplatereplacementtype.editformupdatebutton }; var cancellink = new aspxgridviewtemplatereplacement { replacementtype = gridviewtemplatereplacementtype.editformcancelbutton }; formcontainer.controls.add(new literalcontrol(@"<div class=""clearfix""> </div>")); var actionscontainer = new htmlgenericcontrol("div"); actionscontainer.attributes.add("class","edit-actions"); actionscontainer.controls.add(updatelink); actionscontainer.controls.add(cancellink); formcontainer.controls.add(actionscontainer); formcontainer.controls.add(new literalcontrol(@"<div class=""clearfix""> </div>")); container.controls.add(formcontainer); } #endregion private usercontrol loadcontrol(string usercontrolpath, params object[] constructorparameters) { var ctl = currentpage.loadcontrol(usercontrolpath) usercontrol; // find relevant constructor if (ctl != null) { var constructor = ctl.gettype().basetype.getconstructor(constructorparameters.select(constparam => constparam.gettype()).toarray()); //and call relevant constructor if (constructor == null) { throw new memberaccessexception("the requested constructor not found on : " + ctl.gettype().basetype.tostring()); } else { constructor.invoke(ctl, constructorparameters); } } // return initialized uc return ctl; } }
4) "container" control loads "listbox"(postback) usercontrol , here's how implemented:
public listbox(int applicationid, int clientid, int userid, int menuitemid, objects.igridable griditem) : base(applicationid, clientid, userid, menuitemid) { griditem = griditem; } private objects.igridable griditem; protected override void oninit(eventargs e) { base.oninit(e); lstcontainer.selectedindexchanged += new eventhandler(lstdimension_selectedindexchanged); lstcontainer.datasource = griditem.parametervalues; lstcontainer.datatextfield = "valuename"; lstcontainer.appenddatabounditems = true; lstcontainer.databind(); lblcontainer.text = griditem.columnname; }
5) created interface postback user controls implement:
public interface iparameter { igridable clientparameter { get; set; } }
6) , here's implementation of interface:
#region iparameter members public igridable clientparameter { { foreach (parametervalue parametervalue in griditem.parametervalues) { parametervalue.isselected = false; foreach (string selectedvalue in lstdimension.getselectedvalues()) { if (parametervalue.valuename == selectedvalue) { parametervalue.isselected = true; } } } return griditem; } set { clientparameter = value; } } #endregion
7) in container control, when go grab selected values list box (or clientparameter), this i'm running issues grabbing actual selected values list box:
foreach (igridable gridcolumntemplate in gridcolumns) { var mycontrol = grid.findeditformtemplatecontrol(gridcolumntemplate.paramname); if (mycontrol iparameter) { var clientcontrol = (iparameter)mycontrol; gridcolumntemplate.parametervalues = clientcontrol.clientparameter.parametervalues; var parameter = parameterlistelement.appendchild(parameterxml.createelement("parameter")); var parametername = parameterxml.createattribute("parametername"); parametername.value = gridcolumntemplate.paramname; parameter.attributes.append(parametername); foreach (parametervalue paramvalue in clientcontrol.clientparameter.parametervalues) { if (paramvalue.isselected) { xmlnode value = parameter.appendchild(parameterxml.createelement("pv")); value.innerxml = paramvalue.valueid; } } } }
Comments
Post a Comment