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)
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
Post a Comment