1、WalkThroughSharePoint WebPart 入门指南 五,,Kaneboy MS MVP,转载声明:此WalkThrough系列被转载和引用时,请保持博客堂链接。Thanks.,此WalkThrough将演示,在两个WebPart之间交换数据(Connectable WebPart),背景知识,了解WebPart编程的一般知识,请阅读此WalkThrough系列的前4辑。此WalkThrough中将不对某些具体细节(部署等)做详细描述。,一、了解Connectable WebPart,Provider WebPart,Consumer WebPart,ICellProvider
2、IRowProviderIListProviderIFilterProviderIParametersInProviderIParametersOutProvider,ICellConsumer IRowConsumer IListConsumer IFilterConsumerIParametersInConsumerIParametersOutConsumer,这个WebPart做为数据提供者,这个WebPart做为数据使用者,提供者可以向使用者提供:一项数据(Cell)一行数据(Row)一个表的数据(List)查询过滤器(Filter)参数(Parameters), Provider W
3、ebPart至少需要实现一个Provider接口 Consumer WebPart至少需要实现一个Consumer接口 Provider接口和Consumer接口(通过Transformer)不一定要一一对应 位于不同页面的符合要求的WebPart也可以连接起来,二、创建Provider WebPart(一),在VS.NET中建立一个类型为“Web Part Library”,名称为“SampleWebPart”的项目。将VS.NET自动创建的WebPart1( WebPart1.cs、 WebPart1.dwp)删除。如左图,新建一个“Provider Web Part”,名称为“CityP
4、rovider”,三、创建Provider WebPart(二),如下图所示,VS.NET自动生成的CityProvider不但从Microsoft.SharePoint.WebPartPages.WebPart继承,还实现了ICellProvider接口。实现了ICellPrivider的WebPart可以提供给别的WebPart一项数据。,在自动生成的“EnsureInterfaces()”方法中,可以看到有一条调用“RegisterInterface()”方法(包含8个参数)的语句,将其更改为:RegisterInterface(CellProvider_WPQ_,ICellProvid
5、er,WebPart.UnlimitedConnections,ConnectionRunAt.Server,this,CellProviderInterface_WPQ_,“提供一个城市名称给:,“提供一项包含了城市名称的数据);,四、创建Provider WebPart(三),在CityProvider中定义一个下拉框控件:private DropDownList cityList = new DropDownList();重写基类的“OnLoad()”方法,给下拉框绑定一些数据:protected override void OnLoad(EventArgs e) if (cityLis
6、t.Items.Count = 0) cityList.DataSource = new String “北京”, “上海”, “深圳; cityList.DataBind(); this.Controls.Add( cityList ); cityList.AutoPostBack = true;在已有的“RenderWebPart()”方法中,输出这个下拉框控件的内容:protected override void RenderWebPart(HtmlTextWriter output) cityList.RenderControl(output);,五、创建Provider WebPar
7、t(四),在已有的“PartCommunicationMain()”方法中添加下面的代码,将开始添加的下拉框控件中选中的项的数据传递出去。public override void PartCommunicationMain() if (CellReady != null) / 创建要传递出去的数据 CellReadyEventArgs cellReadyArgs = new CellReadyEventArgs(); cellReadyArgs.Cell = cityList.SelectedItem.Text; / 通过CellReady这个事件,将数据传递给使用者 CellReady( t
8、his, cellReadyArgs ); ,六、创建Consumer WebPart(一),如左图,新建一个“Consumer Web Part”,名称为“CityConsumer”,七、创建Consumer WebPart(二),如下图所示,VS.NET自动生成的CityConsumer不但从Microsoft.SharePoint.WebPartPages.WebPart继承,还实现了ICellConsumer接口。实现了ICellConsumer的WebPart可以从别的WebPart接收一项数据。,在自动生成的“EnsureInterfaces()”方法中,可以看到有一条调用“Reg
9、isterInterface()”方法(包含8个参数)的语句,将其更改为:RegisterInterface(CellConsumer_WPQ_,ICellConsumer,WebPart. LimitOneConnection,ConnectionRunAt.Server,this,CellConsumer_WPQ_,从.处接收一个城市名称,获取一项包含了城市名称的数据);,八、创建Consumer WebPart(三),在已有的“CellReader()”方法中,接收Provider WebPart传送过来的数据,并赋值给自动生成的Text属性:public void CellReady(
10、object sender, CellReadyEventArgs cellReadyArgs) if(cellReadyArgs.Cell != null) Text = 你选择的是: + cellReadyArgs.Cell.ToString(); 这个“CellReady()”方法会被SharePoint自动注册到(被连接起来的)Provider WebPart的CellReady事件,参看第五步骤。这样Provider WebPart就可以将数据通过CellReady事件传过来。在自动生成的这个CityConsumer中,VS.NET会自动添加一个Text属性,并把Text属性的值在“
11、RenderWebPart()”方法中输出。所以我们这个演示无需手写更多代码。,九、为两个WebPart创建部署文件,如右图,在项目中增加两个Dwp部署文件,分别命名为“CityProvider.dwp”和“CityConsumer.dwp”。下面分别是这两个Dwp文件的内容:, CityProvider 一个提供城市名称的WebPart SampleWebPart SampleWebPart.CityProvider CityConsumer 一个接收城市名称的WebPart SampleWebPart SampleWebPart.CityConsumer,十、部署、连接两个WebPart,
12、将两个WebPart部署到一个页面上,如左图。由于我们尚未将它们连接起来,它们之间不会有任何数据的交互。点击页面右上角的“修改我的网页”,选择“设计此网页”,进入当前页面的编辑状态。,如上图,点击CityProvider WebPart右上方的菜单按钮,选择“连接、提供一个城市名称给:、CityConsumer”,将这两个WebPart连接了起来。同样,也可以点击CityConsumer WebPart右上角的菜单按钮,选择“连接、从处接收一个城市名称、CityProvider”,来进行连接的操作。两者做其一即可。,十一、连接WebPart的效果,如左图,将两个WebPart连接起来以后,CityConsumer就可以接收到CityProvider选中的城市的名称,来动态的输出接收到的数据。,从CityProvider的下拉框中选择“上海”这个选项。,可以看到CityConsumer根据接收到的新的数据更改了输出内容。,十二、To Be Continued,,Kaneboy MS MVP,