zoukankan      html  css  js  c++  java
  • WEBPART结合实际的应用(.Net2005)

      WEBPART已经不是很新鲜的东西了,但是小生是最近才使用到(汗,惭愧。),既然是BLOG当然会想分享自己的一些小知识,有兴趣的朋友可以看看。
      本次的目的主要是为了实现用户自定义初始页界面,我做了好多用户控件来供用户选择,当然用户并不能选择所有的用户控件,他只能根据自己的权限在设定范围内选择。在用户没有定义界面以前,既初始状态下,程序会根据用户当前的角色为用户定义界面,动态的将用户控件包装成WEBPART加到WEBPARTZONE里面去。在用户自己配置过界面后,以后都按用户配置的方式显示。
      用户控件的编写我就不罗嗦了,都是一些信息的聚合,比如通知啊规章制度啊这样的信息模块。具体来说说后面的,为了实现以上目标我们需要几张表,一张是用户控件管理表,记录了用户控件的ID,名字,以及存放位置,还有控件会加载到哪一个WEBPARTZONE中。(我在用户界面中定义了3个WEBPARTZONE)。另一张是角色控件对应表,指定那一个角色可以拥有哪些控件,这两张表都很简单,这样基础的后台就有了。
      在前台用户进入主界面的时候做一个判断,看页面的WEBPARTZONE中是否有WEBPART,如果没有就根据用户角色将所拥有的用户控件加到主界面中去。
    代码如下
     1 int count = 0;
     2            foreach (WebPartZone wpz in wpmMain.Zones)
     3            {
     4                count += wpz.WebParts.Count;
     5            }

     6            if (count == 0)
     7            {
     8                Shuttle shuttle = Shuttle.CreateShuttle("fGet_UI_SysUserControl");
     9                shuttle.SetParameterValue("UserID", ParseHelper.IntParse(User.Identity.Name));
    10                DataSet ds = (DataSet)DataHelper.Execute(shuttle);
    11                foreach (DataRow dr in ds.Tables[0].Rows)
    12                {
    13                    Control uc = this.LoadControl(@"Controls/" + dr["ControlPath"].ToString());
    14                    uc.ID = dr["ControlID"].ToString();
    15                    GenericWebPart wp2 = wpmMain.CreateWebPart(uc);
    16                    wp2.Title = dr["ByName"].ToString();
    17                    wpmMain.AddWebPart(wp2, wpmMain.Zones[Convert.ToInt32(dr["ControlField"].ToString())], 0);
    18                    
    19                }

    20            }
      在这里我其实自己还有个问题没有解决,就是我动态加载的这些WEBPART无法保存到数据库当中去,不知道有哪为朋友做过类似的东西,可以指点一下。
      上面是在用户没有进行设置时候进行的初始操作,当用户要自定义界面时候,通过一个按钮将页面模式设置为CatalogDisplayMode。页面有一个CatalogZone控件,用来存放当前角色所拥有的用户控件。在这里最主要的程序就是需要一个WebPartsTemplate来存放这些控件,我们需要自己写一个实现 ITemplate接口的类。代码如下。
     1 class wt : ITemplate
     2    {
     3        private WebPartManager w;
     4        private Page p;
     5        string userid;
     6        int count;
     7        public void InstantiateIn(Control container)
     8        {
     9            Shuttle shuttle = Shuttle.CreateShuttle("fGet_UI_SysUserControl");
    10            shuttle.SetParameterValue("UserID", ParseHelper.IntParse(userid));
    11            DataSet ds =(DataSet) DataHelper.Execute(shuttle);
    12            
    13            foreach (DataRow dr in ds.Tables[0].Rows)
    14            {
    15                Control uc = p.LoadControl(@"Controls/" + dr["ControlPath"].ToString());
    16                uc.ID = dr["ControlID"].ToString();
    17                GenericWebPart wp = w.CreateWebPart(uc);
    18                wp.Title = dr["ByName"].ToString();
    19                container.Controls.Add(wp);
    20              
    21            }

    22
    23        }
    这样在切换模式以后就可以根据角色选择自己所需要的控件了。如下图
    最后在添加WEBPART的时候做一点小处理
     1  protected void wpmMain_WebPartAdding(object sender, WebPartAddingEventArgs e)
     2    {
     3        foreach (WebPartZone wpz in wpmMain.Zones)
     4        {
     5            if (!CheckWebPart(e.WebPart, wpz))
     6            {
     7                e.Cancel = true;
     8                WebDialog.Show(this.Page, "配置中已包含有该模块.");
     9                return;
    10            }

    11        }

    12        e.Cancel = false;
    13    }
    private bool CheckWebPart(WebPart wp, WebPartZoneBase wpz)
    14    {
    15       
    16        foreach (WebPart w in wpz.WebParts)
    17        {
    18            if (w.Title.Equals(wp.Title))
    19            {
    20                return false;
    21            }

    22        }

    23        return true ;
    24    }
    至此,上面说的基本功能已经实现,如果大家有更好的办法或者是可以解决我说的动态WEBPART保存的问题请指点一下,交流促进发展
  • 相关阅读:
    LeetCode "Super Ugly Number" !
    LeetCode "Count of Smaller Number After Self"
    LeetCode "Binary Tree Vertical Order"
    LeetCode "Sparse Matrix Multiplication"
    LeetCode "Minimum Height Tree" !!
    HackerRank "The Indian Job"
    HackerRank "Poisonous Plants"
    HackerRank "Kundu and Tree" !!
    LeetCode "Best Time to Buy and Sell Stock with Cooldown" !
    HackerRank "AND xor OR"
  • 原文地址:https://www.cnblogs.com/DarkAngel/p/556209.html
Copyright © 2011-2022 走看看