i have following code tab container , able create tab dynamically try click add tab previous tab disappears, can't figure out how keep viewstate, can please me this.
test5.aspx
<%@ page language="c#" autoeventwireup="true" codefile="test5.aspx.cs" inherits="test5" %> <!doctype html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:scriptmanager id="scriptmanager1" runat="server"></asp:scriptmanager> <cc1:tabcontainer id="tabcontainer1" visible="true" runat="server" height="150px"> <cc1:tabpanel id="tab0" runat="server" headertext="step 1"> <contenttemplate> test <asp:button id="add" text="add" onclick="add_click" runat="server" /> </contenttemplate> </cc1:tabpanel> </cc1:tabcontainer> </div> </form> </body> </html> test5.aspx.cs
using ajaxcontroltoolkit; using system; using system.collections.generic; using system.linq; using system.web; using system.web.ui; using system.web.ui.webcontrols; public partial class test5 : system.web.ui.page { protected void page_load(object sender, eventargs e) { } protected void add_click(object sender, eventargs e) { int currenttab = tabcontainer1.activetabindex; int nexttab = currenttab + 1; button btn = new button(); btn.id = "add" + nexttab.tostring(); btn.text = "add"; btn.click += new eventhandler(add_click); tabpanel t = new tabpanel(); t.id = "tab" + nexttab; t.headertext = "tab:" + nexttab; t.controls.add(btn); tabcontainer1.tabs.add(t); } }
here's i'd do:
wrap following code:
button btn = new button(); btn.id = "add" + nexttab.tostring(); btn.text = "add"; btn.click += new eventhandler(add_click); tabpanel t = new tabpanel(); t.id = "tab" + nexttab; t.headertext = "tab:" + nexttab; t.controls.add(btn); tabcontainer1.tabs.add(t); into own method called renderdynamictabs(int nexttab)
at end of add_click, add code:
if(null == viewstate["numdynamiccontrols"]) { viewstate["numdynamiccontrols"] = 0; } var dynamiccontrolcount = int.parse(viewstate["numdynamiccontrols"]); dynamiccontrolcount++; in page_load, add following:
if(null != viewstate["numdynamiccontrols"]) { // there controls need re-generated var dynamiccontrolcount = int.parse(viewstate["numdynamiccontrols"]); for(int = 1; <= dynamiccontrolcount; i++) { renderdynamictabs(i); } } that should both store , re-render controls after each postback.
finally, avoid duplication of code, in add_click, replace code copy-pasted renderdynamictabs call renderdynamictabs(nexttab);.
Comments
Post a Comment