c# - Checkboxlist inside a usercontrol going as null when control passed from an aspx page -


have landed scenario again. summary follows: have user-control mix of textbox,imagebuttons,checkboxlist incorporated single-select dropdown checkboxes..works pretty fine. 1 of images inside usercontrol opens aspx page popup.have few functionalities there viz saving values database , stuffs. on ok button click of popup page, should able save values db populate usercontrol(which acts dropdown) value have saved db. here problem arises, when trying bind checkboxlist(present in usercontrol) values db, error checkboxlist object null , has not been created. feel on ok button click, usercontrol has refresh , hence checkboxlist active.

pfb relevant codes: usercontrol.ascx:

<%@ control language="c#" autoeventwireup="true" codebehind="singleselectcustomdropdown.ascx.cs" inherits="ms.it.informa.ui.usercontrols.singleselectcustomdropdown" %>  <asp:panel id="panel" runat="server"> <div id="firstdiv"> <table> <tr> <td align="right"> <asp:textbox id="txtselect" runat="server" readonly="true"></asp:textbox> </td> <td> <asp:image id="imgshow" imageurl="../images/ddglyph.png" onmouseover="this.src='../images/ddglyphhover.png'" onmouseout="this.src='../images/ddglyph.png'" runat="server" /> </td> </tr> <tr> <td colspan="2"> <div id="seconddiv" style="display:none;"> <asp:checkboxlist id="chkboxlist" runat="server"> <asp:listitem value="0" text="standard" selected="true"></asp:listitem> </asp:checkboxlist> </div> <div id="thirddiv" style="display:none;"> <asp:imagebutton id="btnnew" runat="server" height="20px" imageurl="~/images/new.png" width="20px" onclientclick="showpopup();" /> <asp:imagebutton id="btnedit" runat="server" height="20px" imageurl="~/images/edit.png" width="20px" /> <asp:imagebutton id="btndefault" runat="server" height="20px" imageurl="~/images/default.png" width="20px" /> <asp:imagebutton id="btndelete" runat="server" height="20px" imageurl="~/images/delete.png" width="20px" /> </div> </td> </tr> </table> </div> </asp:panel> <script type="text/javascript"> //displays divs containing checkboxlist , images function showlist() {     document.getelementbyid("seconddiv").style.display = "block";     document.getelementbyid("thirddiv").style.display = "block"; } //hides divs containing checkboxlist , images function hidelist() {     document.getelementbyid("seconddiv").style.display = "none";     document.getelementbyid("thirddiv").style.display = "none"; } //displays selected item checkboxlist textbox placed in custom control function displayselecteditem(sender, txtboxid) {      var x = document.getelementbyid(sender.id);     var chkboxprefix = sender.id + "_";     var selectedtext;     (i = 0; < x.rows.length; i++) {     if(document.getelementbyid(chkboxprefix+i).checked)     {         selectedtext = document.getelementbyid(chkboxprefix+i).parentnode.innertext;     }     }     document.getelementbyid(txtboxid.id).value = selectedtext; } //ensures 1 item selected checkboxlist function selectonlyonecheckbox(e) {      if (!e) e = window.event;     var sender = e.target || e.srcelement;     if (sender.nodename != 'input') {         return;     }     var checker = sender;     var chkbox = document.getelementbyid('<%= chkboxlist.clientid %>');     var chks = chkbox.getelementsbytagname('input');     (i = 0; < chks.length; i++) {         if (chks[i] != checker)             chks[i].checked = false;     } } function showpopup() {     window.open("viewcolumnoptions.aspx", "viewcolumnoptions", "height=300,width=600,left=300,top=150"); } </script> 

the codebehind usercontrol below:

public partial class singleselectcustomdropdown : system.web.ui.usercontrol     {         protected void page_load(object sender, eventargs e)     {             if (!ispostback)         {             chkboxlist.attributes.add("onclick", "selectonlyonecheckbox(event);displayselecteditem(this," + txtselect.clientid + ");hidelist();");             txtselect.attributes.add("onclick", "showlist();");             imgshow.attributes.add("onclick", "showlist();");         }     }     public void populateotherviews()     {         savereportviewfilter<reportfilterbase> newobj = new savereportviewfilter<reportfilterbase>();         viewcolumnoptions vwobj = new viewcolumnoptions();         newobj.username = vwobj.page.user.identity.name;         savereportview<reportfilterbase> obj2 = new savereportview<reportfilterbase>();         datatable dt = obj2.getsavereportviewfromdatabase(newobj);         chkboxlist.datasource = dt;//chkboxlist becomes null here..we have ample data in datatable though         chkboxlist.datatextfield = dt.columns[0].tostring();         chkboxlist.datavaluefield = dt.columns[0].tostring();         chkboxlist.databind();     } } 

the function populateotherviews called on button click of aspx page. below code:

    protected void btnok_click(object sender, eventargs e)     {         if (chksaveview.checked)         {             if (!string.isnullorempty(txtviewname.text))             {                 //some code here save view name txtviewname db                 singleselectcustomdropdown obj22 = new singleselectcustomdropdown();                 obj22.populateotherviews();                 page.clientscript.registerstartupscript(this.gettype(),"close","closewindow();",true);           }             else             {                 page.clientscript.registerstartupscript(this.gettype(), "alertenterviewname", "alertmessage('please enter view name');", true);             }          }      } 

any help, suggestions, pointers appreciated. regards anurag

in btnok_click creating new instance of user control , not attaching page. suggestion is:

1.register user control , add page.

<%@ register src="~/usercontrol/singleselectcustomdropdown.ascx" tagprefix="uc1" tagname="singleselectcustomdropdown" %> 

and ...

<uc1:singleselectcustomdropdown runat="server" id="obj22" />  

2.now modify in code behind:

protected void btnok_click(object sender, eventargs e) {         if (chksaveview.checked)     {         if (!string.isnullorempty(txtviewname.text))         {             //some code here save view name txtviewname db             //do not create control again             //singleselectcustomdropdown obj22 = new singleselectcustomdropdown();             obj22.populateotherviews();             page.clientscript.registerstartupscript(this.gettype(), "close", "closewindow();", true);          }         else         {             page.clientscript.registerstartupscript(this.gettype(), "alertenterviewname", "alertmessage('please enter view name');", true);         }      } } 

Comments