zoukankan      html  css  js  c++  java
  • 学习webparts系列控件总结

     

    WebParts系列控件说明

    这里下载代码WebPartManager 控件:

    Web Parts的总控中心,管理 Web Parts及区域的列表管理页面状态 (比如显示状态),当页面状态时发生改变时触发事件,协助Web Parts间的通讯,管理个性化等.

    使用后的代码如下:

    <asp:WebPartManager ID="WebPartManager1" RunAt="server" />

    Ø   WebPartManager.DisplayMode设置或者获取页面的显示模式

    BrowserDisplayMode         “正常的” 显示模式,无法编辑(默认)
    DesignDisplayMode            允许拖拽式布局编辑
    EditDisplayMode                  允许编辑Web Part的外观及行为
    CatalogDisplayMode          
    允许将Web Part添加在另外的页面上
    ConnectDisplayMode         允许Web Parts之间进行通讯

    Ø WebPartManager.DisplayModeChanging 指示显示模式是否要发生改变

    WebPartDisplayModeCancelEventArgs    获得新的显示模式并且允许控制者取消这种改变

    WebPartManager.DisplayModeChanged  指示显示模式是否已经发生改变
    WebPartDisplayModeEventArgs               得到原来的显示模式

    WebPartZone 控件:

    在 Web Parts页面中定义区域,定义每个区域当中Web Part的默认显示样式及布局

    使用后代码如下:

    <asp:WebPartZone ID="WeatherZone"
      DragHighlightColor="244,198,96" RunAt="server">
      <PartTitleStyle BackColor="#2254B1" ForeColor="White" />
      <PartStyle BorderColor="#81AAF2" BorderStyle="Solid" BorderWidth="1px" />
      <ZoneTemplate>
        <!-- Web Parts declared here -->
      </ZoneTemplate>
    </asp:WebPartZone>

    Ø         Web Part Chrome标题框及Web Part的边框,通过 WebPartZone 定义其外观。

    Ø         Web Parts
    在 WebPartZone中定义的控件;Web controls, user controls, custom controls
    未实现IWebPart接口的控件将封装进GenericWebParts
    增加以下属性: Title, Description, etc.

    使用后代码如下:
    <ZoneTemplate>
        <asp:Calendar Title="Calendar" ID="Calendar1" RunAt="server" />
        <user:Weather Title="Weather" ID="Weather1" RunAt="server" />
        <custom:Search Title="Search" ID="Search1" RunAt="server" />
      </ZoneTemplate>

    其它的区域类型

    CatalogZone             允许用户在页面上添加Web Part
    EditorZone               允许用户更改Web Part的属性及布局
    ConnectionsZone     允许用户建立Web Part之间的通讯

    CatalogZone 控件

    允许Web Part可以交互式的进行添加,包含一个或者多个 CatalogPart 控件

    PageCatalogPart               显示页面上已经删除的Web Part的列表
    DeclarativeCatalogPart      显示声明在 <WebPartsTemplate>中的Web Part的列表
    ImportCatalogPart            允许从 .WebPart文件中导入的Web Part

    EditorZone控件

    允许交互式的对 Web parts进行更改,包含一个或者多个 EditorPart 控件
    AppearanceEditorPart       提供修改标题及其它界面相关属性的UI
    BehaviorEditorPart            提供修改行为属性的UI
    LayoutEditorPart               提供修改Web Part的显示状态,区域及区域索引的UI
    PropertyGridEditorPart     提供修改定制属性的UI,允许修改自定义属性的UI显示标记                             为[WebBrowsable]的属性

    ConnectionsZone 控件

    提供供Web Part进行通讯的UI,最终用户,而不是开发人员创建通讯关系

    <asp:ConnectionsZone ID="ConnectionsZone1" Runat="server" />

    Web Part 通讯

    Web Parts可以相互通讯,提供者发布接口,订阅者通过接口获得数据,WebPartManager 管理通讯,从提供者获得接口,向订阅者发布接口,通讯可以是静态的,也可以是动态的,ConnectionsZone 提供后期绑定的UI

    Ø         通讯提供者

    实现方法返回接口,方法特性 [ConnectionProvider]

    部分代码如下:

    [ConnectionProvider ("Zip Code", "ZipCodeProvider")]
    public IZipCode GetZipCodeInterface ()
    {
    return this; // Assumes control implements IZipCode
    }

    // IZipCode.GetZipCode implementation
    public string GetZipCode ()
    {
    return _zip;
    }

    通讯订阅者
    实现方法接收接口参数
    方法特性 [ConnectionConsumer]

    部分代码如下:

    [ConnectionConsumer ("Zip Code", "ZipCodeConsumer")]
    public void GetIZipCodeInterface (IZipCode provider)
    {
    string zip = provider.GetZipCode (); // Get zip code from provider
    ...
    }静态通讯方式
    WebPartManager的 <StaticConnections> 元素中定义
    最终用户无法修改
    <asp:Connection>的实例
    <asp:WebPartManager ID="WebPartManager1" Runat="server">
    <StaticConnections>
    <asp:Connection ID="ZipCodeConnection" Runat="server"
    ProviderID="Weather1" ProviderConnectionPointID="ZipCodeProvider"
    ConsumerID="News1" ConsumerConnectionPointID="ZipCodeConsumer" />
    </StaticConnections>
    </asp:WebPartManager>

    Web Parts 个性化

    Web Parts 个性化服务
    自动保存相关Web Part的属性 (布局, 外观等等)
    自动保存标记为 PersonalizableAttribute的定制属性
    PersonalizationAdministration 类
    提供个性化服务的API
    Provider-based for flexible data storage
    Per-User 个性化
    [Personalizable] 为每位用户保存定制属性
    string _stocks; // e.g., "MSFT,INTC,AMZN"

    [WebBrowsable]
    [Personalizable]
    public string Stocks
    {
    get { return _stocks; }
    set { _stocks = value; }
    }

    Shared Personalization
    [Personalizable (PersonalizationScope.-Shared)] persists properties on shared basis
    string _stocks; // e.g., "MSFT,INTC,AMZN"

    [WebBrowsable]
    [Personalizable (PersonalizationScope.Shared)]
    public string Stocks
    {
    get { return _stocks; }
    set { _stocks = value; }
    }
    个性化服务是基于Provider模式
    使用 SQL Server Provider
    <configuration>
    <system.web>
    <webParts>
    <personalization defaultProvider="AspNetSqlPersonalizationProvider" />
    </webParts>
    </system.web>
    </configuration>

    定制Web Parts
    任何控件均可以作为Web Parts来运行,但…
    Controls that derive from WebPart can better leverage the Web Parts infrastructure
    控件标题及其它与UI相关的属性
    控件的AllowClose, AllowZoneChange, AllowMinimize, 以及其它行为属性
    应用基于角色的安全特性 (授权方式)
    增加自定义操作,导出Web Part以及更多..
    增加自定义操作
    public class MyWebPart : WebPart
    {
    public override WebPartVerbCollection Verbs
    {
    get {
    EnsureChildControls ();
    WebPartVerb verb =
    new WebPartVerb (new WebPartEventHandler (OnClearResults));
    verb.Text = "Clear Results";
    WebPartVerb[] verbs = new WebPartVerb[] { verb };
    return new WebPartVerbCollection (base.Verbs, verbs);
    }
    }

    void OnClearResults (object sender, WebPartEventArgs args) { ... }
    ...
    }
    导出Web Part
    WebPart.ExportMode属性
    WebPartExportMode.None (默认)
    WebPartExportMode.All
    WebPartExportMode.NonSensitiveData
    “All” 及 “NonSensitiveData” 增加导出操作以便Web Part可以被导出
    仅[Personalizable] 属性
    PersonalizableAttribute.IsSensitive识别 “sensitive” 属性
    导出所有属性
    public class MyWebPart : WebPart
    {
    public MyWebPart ()
    {
    ExportMode = WebPartExportMode.All;
    }
    ...
    }
    导出所选择的属性
    public class MyWebPart : WebPart
    {
    public MyWebPart ()
    {
    ExportMode = WebPartExportMode.NonSensitiveData;
    }

    // This property will be exported
    [Personalizable (PersonalizationScope.User, false)]
    public string ZipCode
    { ... }

    // This one will not
    [Personalizable (PersonalizationScope.User, true)]
    public string SocialSecurityNumber
    { ... }
    ...
    }

    WebPartsDemo制作过程及相关技术说明

    第一阶段 实现控件基本功能

    1.首先使用vs.net 2005新建一个web站点 命名为WebPartsDemo;

    2.建立一个页面作为实现该系列控件的载体。在页面上建立一个三行两列的表格,并合并三行单元格,将此作为webpart第二行之间通讯的订阅者显示部分,

    3.向标题下放拖放一个WebPartManager控件,分别为每一个单元格里面拖放一个webpartzone控件。

    4.向webpartzone1中拖放一个日历控件 设置webpartzone1部分属性值,并且选择合适的样式 将其title 设置为:Demo之日历控件,注意 日历控件本身没有title属性,但当一个控件加入到webpartzone区域中去后,则该控件被自动包装为GenericWebPart类型控件,这些类型的控件有title属性。

    5.运行通过浏览器查看,至此一个最简单的webpart控件应用制作完成。

    第二阶段在Webpart系列控件中,使用用户自定义的控件

    1. 我们为工程项目增加一个"baidu.ascx"的控件(参照详细页面)

    在btnsearch按钮的click事件中写入如下代码:

    Response.Write(Page.IsValid);

            string strSearch = HttpUtility.UrlEncode(txtSearch.Text);

            Response.Redirect("http://www.baidu.com/s?wd="+ strSearch);
     2. 将写好的baidu.ascx控件,整个拖拉到我们刚才建立好的表格中webpartzone2中。

    第三阶段 结合WebPartManager.DisplayMode设置获取页面的显示模式

    设置页面显示模式

    往页面适当位置拖放RadioButtonList控件 指定其内容分别为浏览模式、布局模式、个人化内容定制、模块编辑模式;并将其 Autopostback 设置为true

    编写以下代码

    protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)

        {

            switch (RadioButtonList1.SelectedIndex)

            {

                case 0:

                    WebPartManager1.DisplayMode = WebPartManager.BrowseDisplayMode;

                    break;

                case 1:

                    WebPartManager1.DisplayMode = WebPartManager.DesignDisplayMode;

                    break;

                case 2:

                    WebPartManager1.DisplayMode = WebPartManager.CatalogDisplayMode;

                    break;

                case 3:

                    WebPartManager1.DisplayMode = WebPartManager.EditDisplayMode;

                    break;

                default:

                    break;

            }

    }

    结合显示模式添加webpart系列控件

    1.往窗体中拖拉一个catlogzone控件

    2、往该catlogzone控件区域中,再拖放三个Webpart系列的控件,分别是DeclarativeCatalogPart, PageCatalogPart, and ImportCatalogPart。DeclarativeCatalogPart控件的作用是,显示目前页面上有哪些可以用的webpart控件;PageCatalogPart的作用是,可以让用户通过勾选的方式,选定将哪些控件添加转移到其他webpart区域中去。ImportCatalogPart则可以通过外部磁盘文件的方式,加载其他做好了的webpart部件。

    3.向DeclarativeCatalogPart的摸板中添加baidu.ascx控件

    4.修改DeclarativeCatalogPart, PageCatalogPart, and ImportCatalogPart。控件部分属性

    5.为了在运行过程中用户能够动态的修改webpart的部分属性我们向页面添加一个editor zone的区域控件,往其中再拖放一个appearanceEdiotrPart控件。

    至此demo的浏览模式和设计模式及目录编辑模式,webpart编辑模式制作完成。

    第四阶段:webpart之间的通讯

    1,首先创建两个用户控件作为webpart,一个作为数据的提供者(provider.ascx),另外一个作为数据的订阅者(Consumer.ascx)

    2,定义接口

    3,在提供者中实现接口成员

    4,在提供者中实现[ConnectionProvider]方法

    5,在订阅者中实现[ConnectionConsumer]方法

    6,在WebPartManager控件中声明连接

    详细代码及制作过程请参阅Demo

    第五阶段:自定义webpart

    1.以编程方式将Web部件添加到 WebPartZone 控件里面的方法取决于需要添加的Web部件的类型。如果是一个从 WebPart 继承的类,需要以编程方式创建一个 该类的实例,然后调用 WebPartManager 类的 AddWebPart 方法。调用 AddWebPart 方法时,你需要传入的参数包括:Web部件的实例、 目标 WebPartZone 控件、以及Web部件在 WebPartZone 控件中的索引位置。

    首先 建立一个从WebPart继承的类

    代码如下:

    using System.Web.UI;
    using System.Web.UI.WebControls.WebParts;
     
     public class HelloWorld : WebPart {
     
        public HelloWorld() {
          this.Title = "Hello World";
          this.TitleIconImageUrl = @"img\WhaleBoy.gif";
        }
     
        protected override void RenderContents(HtmlTextWriter writer) {
          writer.Write("Can I have your attention please");
        }
     }

    2.动态将其添加到页面详细请看Demo

  • 相关阅读:
    Beta阶段事后诸葛亮分析
    Beta阶段项目复审
    展示博客
    Beta版本测试报告以及Beta版本发布说明
    团队作业8——第二次项目冲刺(Beta阶段)博客汇总
    团队作业8----第二次项目冲刺(beta阶段)5.25
    团队作业8----第二次项目冲刺(beta阶段)5.24
    团队作业8----第二次项目冲刺(beta阶段)5.23
    团队作业8----第二次项目冲刺(beta阶段)5.22
    团队作业8----第二次项目冲刺(beta阶段)5.21
  • 原文地址:https://www.cnblogs.com/huhu456/p/385305.html
Copyright © 2011-2022 走看看