c# - Data Lost from UserControl when I use RadGrid EditForm with UserControl -


i use radgrid editform usercontrol sample telerik sample

<telerik:radgrid id="persongrid" runat="server" autogeneratecolumns="false" oneditcommand="persongrid_editcommand" onupdatecommand="persongrid_updatecommand">         <mastertableview datakeynames="id" commanditemdisplay="top">             <editformsettings usercontrolname="personitemsuc.ascx" editformtype="webusercontrol">             </editformsettings>             <columns>                 <telerik:gridboundcolumn uniquename="id" display="false" headertext="id" datafield="id">                 </telerik:gridboundcolumn>                 <telerik:gridboundcolumn uniquename="name" headertext="name" datafield="name">                 </telerik:gridboundcolumn>                 <telerik:gridboundcolumn uniquename="family" headertext="family" datafield="family">                 </telerik:gridboundcolumn>                 <telerik:gridboundcolumn uniquename="age" headertext="age" datafield="age">                 </telerik:gridboundcolumn>                 <telerik:gridboundcolumn uniquename="mobileno" headertext="mobileno" datafield="mobileno">                 </telerik:gridboundcolumn>                 <telerik:grideditcommandcolumn edittext="update" uniquename="editcommandcolumn">                 </telerik:grideditcommandcolumn>                 <telerik:gridbuttoncolumn uniquename="deletecolumn" text="delete" commandname="delete">                 </telerik:gridbuttoncolumn>             </columns>         </mastertableview> </telerik:radgrid> 

and have usercontrol (have person info data) enter image description here

i have method in usercontrol (getdatafromcontrols)

        public person getdatafromcontrols()     {         var skey = typeof(person).fullname + "keys";         var p = new person();         p.id = convert.toint32(sessionmanager.instance[skey]); // id store in session persongrid_editcommand method         p.name = txtname.text;         p.family = txtfamily.text;         p.age = convert.toint32(txtage.text);         p.mobileno = txtmobileno.text;         return p;     } 

can data textboxes , other controls , set person instanse ok want update data use method in page.aspx

protected void persongrid_updatecommand(object sender, gridcommandeventargs e) {     var usercontrol = e.item.findcontrol(grideditformitem.editformusercontrolid) personitemsuc;     if (usercontrol != null)     {         var p = usercontrol.getdatafromcontrols(); //here         _personbusiness.update(p);     } } 

first found usercontrol in updatecommand method , call getdatafromcontrols method except id session other data lost !!! textboxes empty

how can call getdatafromcontrols() method valid data ?

another solution came mind saving getdatafromcontrols session property

    public person currententity     {                 {             var key = typeof(person).fullname;             return sessionmanager.instance[key] person;         }         set         {             var key = typeof(person).fullname;             sessionmanager.instance.add(key, value);         }     } 

and call currententity instead of getdatafromcontrols()

    protected void persongrid_updatecommand(object sender, gridcommandeventargs e)     {         var usercontrol = e.item.findcontrol(grideditformitem.editformusercontrolid) personitemsuc;         if (usercontrol != null)         {             var p = usercontrol.currententity; //here             _personbusiness.update(p);         }     } 

but i dont know when fill currententity in event usercontrol ?

currententity = getdatafromcontrols(); // when assign method currententity in usercontrol ??? 

can suggest solution calling getdatafromcontrols usercontrol in page.aspx without lost data ???

please try below code snippet.

aspx

<body>     <form id="form1" runat="server">         <div>             <telerik:radscriptmanager id="radscriptmanager1" enablepagemethods="true" runat="server">             </telerik:radscriptmanager>             <telerik:radajaxmanager id="radajaxmanager1" runat="server">             </telerik:radajaxmanager>             <telerik:radgrid id="radgrid1" runat="server" autogeneratecolumns="false" onneeddatasource="radgrid1_needdatasource"                 allowmultirowedit="true" onupdatecommand="radgrid1_updatecommand">                 <pagerstyle alwaysvisible="true" />                 <mastertableview datakeynames="id" commanditemdisplay="top">                     <columns>                         <telerik:gridboundcolumn datafield="id" uniquename="id" headertext="id">                         </telerik:gridboundcolumn>                         <telerik:gridboundcolumn datafield="name" uniquename="name" headertext="name">                         </telerik:gridboundcolumn>                         <telerik:grideditcommandcolumn></telerik:grideditcommandcolumn>                     </columns>                     <editformsettings usercontrolname="webusercontrol1.ascx" editformtype="webusercontrol">                         <editcolumn uniquename="editcommandcolumn1">                         </editcolumn>                     </editformsettings>                 </mastertableview>             </telerik:radgrid>         </div>     </form> </body> 

aspx.cs

public partial class forum : system.web.ui.page {      protected void radgrid1_needdatasource(object sender, gridneeddatasourceeventargs e)     {         list<employee> list = new list<employee>();         list.add(new employee() { id = 1, name = "name1" });         list.add(new employee() { id = 2, name = "name2" });         list.add(new employee() { id = 3, name = "name3" });         list.add(new employee() { id = 4, name = "name4" });         list.add(new employee() { id = 5, name = "name5" });         radgrid1.datasource = list;     }       protected void radgrid1_updatecommand(object sender, gridcommandeventargs e)     {          grideditableitem editeditem = e.item grideditableitem;          usercontrol usercontrol = (usercontrol)e.item.findcontrol(grideditformitem.editformusercontrolid);         string strname = (usercontrol.findcontrol("textbox1") textbox).text; //get usercontrol data         string strname1 = (usercontrol webusercontrol1).getdatafromcontrols(); //call usercontrol method         //perform operation here     } } 

ascx

<%@ control language="c#" autoeventwireup="true" codefile="webusercontrol1.ascx.cs" inherits="webusercontrol1" %> <%@ register tagprefix="telerik" namespace="telerik.web.ui" assembly="telerik.web.ui" %>  usercontrol...... <br /> <asp:label id="label1" runat="server"></asp:label> <br /> <asp:textbox id="textbox1" runat="server" text='<%# eval("name") %>'></asp:textbox> <br /> <asp:button id="btnupdate" text="update" runat="server" commandname="update"></asp:button> 

ascx.cs

public partial class webusercontrol1 : system.web.ui.usercontrol {     protected void page_load(object sender, eventargs e)     {      }      public string getdatafromcontrols()     {         return textbox1.text;     } } 

let me know if concern.


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -