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

  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/huhu456/p/385305.html
Copyright © 2011-2022 走看看