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"">&nbsp;</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"">&nbsp;</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"">&nbsp;</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"">&nbsp;</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

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -