FineUI 官方论坛

标题: 如何保存代码生成的对象(变量)值 [打印本页]

作者: szjazz    时间: 2013-3-7 02:26
标题: 如何保存代码生成的对象(变量)值
本帖最后由 szjazz 于 2013-3-7 04:21 编辑

通过代码生成对象,过程放在Page_Init,但初始化完毕后,每次点击生成对象的事件时均会重新调用Page_Init,这样,就无法保存初始化后有修改的对象(变量)值,请问各位大师们,有什么方法?或者应该如何设计?
  1.             <x:TabStrip ID="tabStripForm" runat="server" ActiveTabIndex="0" ShowBorder="True"
  2.                 BoxFlex="1" OnTabIndexChanged="TabIndex_Change" AutoPostBack="True">
  3.                 <Tabs>
  4.                 </Tabs>
复制代码
  1. namespace WebJazz.ES
  2. {
  3.     public partial class ShowFormGrp : PageBase
  4.     {
  5.         Jazz.BLL.ES.Form.FormInfo bllForm = new Jazz.BLL.ES.Form.FormInfo();
  6.         Jazz.Model.ES.Form.FormInfo modelFormInfo = new Jazz.Model.ES.Form.FormInfo();
  7.         Jazz.Model.ES.Form.FormAcl modelFormAcl = new Jazz.Model.ES.Form.FormAcl();
  8.         List<Jazz.Model.ES.Form.FormInfo> modelFormInfoLst = new List<Jazz.Model.ES.Form.FormInfo>();
  9.         List<Jazz.Model.ES.Form.FormAcl> modelFormAclLst = new List<Jazz.Model.ES.Form.FormAcl>();

  10.         public class TabInfo
  11.         {
  12.             public string Id { get; set; }
  13.             public bool ChangeRefresh { get; set; }
  14.             public bool RefreshState { get; set; }
  15.         }
  16.        public List<TabInfo> tabInfoLst = new List<TabInfo>();

  17.         protected void Page_Init(object sender, EventArgs e)
  18.         {
  19.             Init_Page();
  20.         }

  21.         protected void Page_Load(object sender, EventArgs e)
  22.         {
  23.             if (!IsPostBack)
  24.             {
  25. ......                Load_Data();
  26.             }
  27.         }


  28.         protected void Init_Page()
  29.         {
  30.             dsFormGrp = FormGroup(2);
  31.             FormGrpKeyField = dsFormGrp.Tables[0].Rows[0]["FormGrpKeyField"].ToString().Split(',');
  32.             FormGrpKeyValue = new string[FormGrpKeyField.Length];
  33.             Init_Tab();
  34.         }

  35.         protected void Init_Tab()
  36.         {
  37.             foreach (DataRow dr in dsFormGrp.Tables[1].Rows)
  38.             {
  39.                 string FormId = dr["FormId"].ToString();
  40.                 //由表单在组表中的类别与表单的ID组成,类别有:M=主表单、S=从表单,例子:M-88.1

  41.                 modelFormInfo = bllForm.GetFormInfoById(FormId);
  42.                 modelFormAcl = bllForm.GetFormUserAuthById(FormId, UserId);
  43.                 modelFormAclLst.Add(modelFormAcl);
  44.                 modelFormInfoLst.Add(modelFormInfo);

  45.                 if (modelFormAcl != null)
  46.                 {
  47.                     if (modelFormAcl.oper > 0)
  48.                     {
  49.                         Tab tab = new Tab();
  50.                         //由表单在组表中的类别与表单的ID组成,类别有:M=主表单、S=从表单,例子:M-88.1
  51.                         tab.ID = dr["FormType"].ToString() + "-" + FormId;

  52.                         tab.Title = dr["FormShowName"].ToString();
  53.                         tab.Layout = FineUI.Layout.Fit;
  54.                         tabStripForm.Tabs.Add(tab);

  55.                         TabInfo tabInfo = new TabInfo();

  56.                         Init_ToolBar(tab, FormId, modelFormAcl, modelFormInfo.FormType);
  57.                         switch (dr["FormType"].ToString())
  58.                         {
  59.                             case "M":
  60.                                 Init_Frame(tab, FormId);
  61.                                 tabInfo.ChangeRefresh = true;
  62.                                 break;
  63.                             case "S":
  64.                                 //非主表单,从属表单,以表格形式显示记录
  65.                                 Init_Grid(tab, FormId);
  66.                                 tabInfo.ChangeRefresh = false;
  67.                                 break;
  68.                             case "X":
  69.                                 tabInfo.ChangeRefresh = false;
  70.                                 break;
  71.                         }
  72.                         tabInfo.Id = tab.ID;
  73.                         tabInfo.RefreshState = false;
  74.                         tabInfoLst.Add(tabInfo);
  75.                     }
  76.                 }
  77.             }
  78.         }

  79.         protected void Init_ToolBar(Tab tab, string FormId, Jazz.Model.ES.Form.FormAcl modelFormAcl, int FormType)
  80.         {
  81.             //
  82.             Toolbar tf = new Toolbar();
  83.             tf.Items.Add(new ToolbarFill());
  84.             Init_Button("Re-" + FormId, "刷新", "~\\res\\images\\icon\\refresh.png", tf);
  85. ......
  86.             tab.Toolbars.Add(tf);
  87.         }

  88.         protected void Init_Button(string btn_ID, string btn_Name, string btn_iconUrl, Toolbar tf)
  89.         {
  90.             FineUI.Button btn = new FineUI.Button();
  91.             btn.ID = btn_ID;
  92.             btn.Text = btn_Name;
  93.             btn.IconUrl = btn_iconUrl;
  94.             btn.Click += new EventHandler(btn_Click);
  95.             btn.Size = FineUI.ButtonSize.Medium;
  96.             tf.Items.Add(btn);
  97.         }

  98.         protected FineUI.Panel Init_Frame(Tab tab, string FormId)
  99.         {
  100.             FineUI.Panel pFrame = new FineUI.Panel();
  101.             pFrame.ID = "Frame-" + FormId;
  102.             pFrame.IFrameName = "Frame-" + FormId;
  103.             pFrame.EnableIFrame = true;
  104.             pFrame.AutoScroll = true;

  105.             pFrame.ShowHeader = false;
  106.             tab.Items.Add(pFrame);
  107.             return pFrame;
  108.         }

  109.         protected void Init_Grid(Tab tab, string FormId)
  110.         {
  111.             //
  112.             Grid grid = new Grid();

  113.             grid.ID = "Grid-" + FormId;
  114. .....
  115.                 grid.Columns.Add(bf);            }

  116.             tab.Items.Add(grid);
  117.         }
  118.         protected void btn_Click(object sender, EventArgs e)
  119.         {
  120.             FineUI.Button btn = (FineUI.Button)sender;
  121.             string target;
  122.             if (btn.ID.Substring(0,3) == "Re-")
  123.             {
  124.                 //手动刷新
  125.                 target = "Frame-" + tabStripForm.ActiveTab.ID.Substring(2);

  126.                 FineUI.Panel panel = (FineUI.Panel)tabStripForm.ActiveTab.FindControl(target);
  127.                 panel.RefreshIFrame();
  128.             }
  129.         }
  130.         protected void Load_Data()
  131.         {
  132.             foreach (Tab tab in tabStripForm.Tabs)
  133.             {
  134.                 //由表单在组表中的类别与表单的ID组成,类别有:M=主表单、S=从表单,例子:M-88.1
  135.                 string FormId = tab.ID.ToString().Substring(2);
  136.                 string FormType = tab.ID.ToString().Substring(0, 1);
  137.                 if (FormType == "M")
  138.                 {
  139.                     //显示主表单内容
  140.                     Load_Form_Data(tab, FormId, FormGrpKeyField, FormGrpKeyValue);
  141.                 }
  142.                 else
  143.                 {
  144.                     //显示表格记录
  145.                     Load_Grid_Data(tab, FormId, FormGrpKeyField, FormGrpKeyValue);
  146.                 }
  147.             }
  148.         }

  149.         protected void Load_Form_Data(FineUI.Tab tab, string FormId, string[] FormGrpKeyField, string[] FormGrpKeyValue)
  150.         {
  151.             FineUI.Panel pFrame = new FineUI.Panel();
  152.             pFrame = (FineUI.Panel)tab.FindControl("Frame-" + FormId);

  153.             modelFormInfo = modelFormInfoLst.Find(delegate(Jazz.Model.ES.Form.FormInfo model) { return model.FormId == FormId; });
  154.             modelFormAcl = modelFormAclLst.Find(delegate(Jazz.Model.ES.Form.FormAcl model) { return model.RtId == FormId; });

  155.             //"ExcelServerRcId","WiId","ExcelServerRN","ExcelServerCN" ="_rcId", "_wiId", "_rn", "_cn"
  156.             FormSysKeyValue[0] = bllForm.GetFormSysKeyByFormKey(FormId, FormSysKeyFieldAlias[0], FormGrpKeyField, FormGrpKeyValue);

  157.             if (modelFormInfo.FormType == 1)
  158.                 //工作流表单
  159.                 FormSysKeyValue[1] = bllForm.GetFormSysKeyByFormKey(FormId, FormSysKeyFieldAlias[1], FormGrpKeyField, FormGrpKeyValue);
  160.             else
  161.                 FormSysKeyValue[1] = string.Empty;

  162.             string AuthStr = modelFormInfo.itemType;
  163.             string Url = null;
  164.             if (FormSysKeyValue[0] != null)
  165.                 Url = string.Format("http://localhost/esweb/Appfunc/main.aspx?repref={0}&rcId={1}&openWiId={2}&flag={3}&isReadOnly=1", FormId, FormSysKeyValue[0], FormSysKeyValue[1], AuthStr);
  166.             pFrame.IFrameUrl = Url;
  167.         }

  168.         protected void Load_Grid_Data(FineUI.Tab tab, string FormId, string[] FormGrpKeyField, string[] FormGrpKeyValue)
  169.         {
  170.             FineUI.Grid grid = new FineUI.Grid();
  171.             grid = (FineUI.Grid)tab.FindControl("Grid-" + FormId);
  172.             DataSet ds = bllForm.GetFormMgrLstById(FormId, FormGrpKeyField, FormGrpKeyValue);
  173.             grid.DataSource = ds.Tables[0];
  174.             grid.DataBind();
  175.         }

  176.         protected void TabIndex_Change(object sender, EventArgs e)
  177.         {
  178.             //希望切换Tab时,能刷新IFrame,但只刷新一次,所以需要保留状态
  179.             FineUI.TabStrip tabStrip = (FineUI.TabStrip)sender;
  180.             string tabId = tabStripForm.ActiveTab.ID;
  181.             TabInfo tabInfo = new TabInfo();
  182.             tabInfo = tabInfoLst.Find(delegate(TabInfo info) { return info.Id == tabId; });
  183.             if (tabInfo.ChangeRefresh && tabInfo.RefreshState == false)
  184.             {
  185.                 tabInfo.RefreshState = true;

  186.                 FineUI.Panel panel = (FineUI.Panel)tabStripForm.ActiveTab.FindControl("Frame-" + tabId.Substring(2));
  187.                 panel.RefreshIFrame();
  188.             }
  189.         }
  190.     }
  191. }
复制代码



作者: 随州热线    时间: 2013-3-7 03:31
不明白,你说的是什么意思
作者: 虫豸    时间: 2013-3-7 04:28
其实我也是不太明白  
你是说数据取出来了 然后下次再访问的时候取不到?
作者: ′訫冇所屬.    时间: 2013-3-7 05:31
是不是页面上有个tab  第一次点击选项卡标签时重新加载iframe?
作者: szjazz    时间: 2013-3-7 05:41
′訫冇所屬. 发表于 2013-3-7 05:31
是不是页面上有个tab  第一次点击选项卡标签时重新加载iframe?

是的,重新加载一次iFrame
作者: 老皮鞋    时间: 2013-3-8 09:18
用session或cookies
作者: 石头    时间: 2013-3-11 03:37
protected void Page_Init(object sender, EventArgs e)

20.        {
                if(!IsPostBack)
                {
21.            Init_Page();
                 Load_Data();
                 }

22.        }


Page_Load方法删掉,MBasePage已经继承了Page,这里不用再写了


作者: szjazz    时间: 2013-3-12 10:36
石头 发表于 2013-3-11 03:37
protected void Page_Init(object sender, EventArgs e)

20.        {

如果是Page_Init过程加判断IsPostBack,则会发生控件无法用代码来控制,所有生成的控件对象会变成null
作者: conqueror    时间: 2013-3-13 05:55
是不错的哇!!!
作者: sanshi    时间: 2013-3-13 09:20
可以把问题简化成一个可以直接运行的例子,这样方便别人调试




欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4