zoukankan      html  css  js  c++  java
  • IPostBackDataHandler实现CollapablePanel控件的状态保持

      在CollapablePanel控件的设计过程中,遇到了这样一个问题:当某一项面板展开时,执行页面后,控件中面板的状态将恢复到原先的状态,这样是不是特感到郁闷。
      查了一下MSDN,从中知道了可以通过实现IPostBackDataHandler来实现。

      下面分别给出实现代码:
      1、在Page_Init将控件注册为需要回发处理的控件。
            protected override void OnInit(EventArgs e)
            
    {
                
    base.OnInit(e);
                
    //遍列每一个CoolPanel,初始其状态
                foreach(CollPanel p in m_Panels)
                
    {
                    p.i_Expanded 
    = m_ExpandSolePanel ? false : p.Expanded;
                }

                
    if(m_ExpandSolePanel)
                
    {
                    m_Panels[
    0].i_Expanded = true;
                }

                
    //注册控件
                if (Page != null)
                
    {
                    Page.RegisterRequiresPostBack(
    this);
                }

            }

      2、在OnPreRender中注册一个HtmlInputHidden控件,并将子面板集合的状态写入。
            protected override void OnPreRender(EventArgs e)
            
    {
                
    base.OnPreRender(e);
                
    string s = "";
                
    foreach(CollPanel p in m_Panels)
                
    {
                    s 
    += (p.i_Expanded.ToString() == "True" ? "1" : "0"+ ",";
                }

                
    if (Page != null)
                
    {
                    Page.RegisterHiddenField(
    this.ClientID + "_state", s);
                }

            }

      3、最后,通过LoadPostData从客户端获得状态
            public bool LoadPostData(String postDataKey, NameValueCollection values) 
            
    {
                
    //从客户端获得每个Panel的状态
                string value = values[this.ClientID + "_state"];
                
    if (value != null)
                
    {
                    
    string[] s = value.Split(',');
                    
    for(int i = 0; i < m_Panels.Count; i++)
                    
    {
                        m_Panels[i].i_Expanded 
    = s[i] == "1" ? true : false;
                    }

                }

                
    return false;
            }

      [  完  ]

      呵呵,是不是很简单哦!!
  • 相关阅读:
    CSP第二轮比赛注意事项
    2021 CCF非专业级别软件能力认证第一轮 (CSP-S)提高级 C++答案及解析
    2021 CCF非专业级别软件能力认证第一轮 (CSP-J)入门级 C++答案及解析
    Python编程与实际运用
    CCF NOI大纲
    搭建自己的kms服务器激活windows和office
    腾讯云数据库连接navicat
    Java unicode编码转换
    git 强制更新版本
    oracle相关
  • 原文地址:https://www.cnblogs.com/faib/p/701637.html
Copyright © 2011-2022 走看看