预定义的接口:IWebPartField、IWebPartRow、IWebPartTable和IWebPartParameters

来源:互联网 发布:淘宝便宜的男装店铺 编辑:程序博客网 时间:2024/06/06 03:44
没有必要创建自己的接口,因为Web Part架构带有四个预定义接口:
IWebPartFieldIWebPartRowIWebPartTableIWebPartParameters。接口提供的机制允许使用程序和提供程序查找彼此的信息,并根据该信息调整它们的操作。从接口的名称可知,
IWebPartField用于传送一个值,
IWebPartRow用于传送一组数据,
IWebPartTable用于传送多行数据,
IWebPartParameters接口支持其他三个接口的功能,并为使用程序提供了一种机制,向提供程序表明它需要什么类型的数据。
IWebPartField、IWebPartRow和IWebPartTable接口非常类似,只需介绍如何使用其中一个接口即可。这里使用IWebPartField接口来说明。
IWebPartField接口概述
IWebPartField接口包含一个方法和一个属性。
●       该方法只有一个参数,允许提供程序调用使用程序中的某个例程。
●       属性是只读的,返回描述该属性的一个对象。
接口的这两个成员一起工作,来为使用程序提供数据和该数据的描述。这个过程描述起来很复杂,所以首先概述其中的步骤,先从使用程序一方开始。
(1) 提供数据的Web Part调用使用程序中的连接点方法,给使用程序传送提供程序使用的接口引用。
(2) 使用程序调用接口上的GetFieldValue方法,传送使用程序中某个例程的引用(这个例程必须是一个子例程,它接收一个Object类型的参数)。提供程序使用这个例程给使用程序传送数据。
(3) 在提供程序中,执行GetFieldValue方法,并给它传送使用程序中已有的例程的引用。
(4) 提供程序调用使用程序中的例程,并传送一个类型的Object参数。此时,提供程序在给使用程序提供数据。
(5) 执行使用程序中的例程,接收提供程序传送过来的数据。
这个过程的灵活性要比上述描述的更大。例如,提供程序接收到使用程序中例程的引用,就可以随时调用该例程,只要不在GetFieldValue方法中即可

 

2. IWebPartField提供程序

在使用IWebPartField接口时,使用程序调用IWebPartField接口的GetFieldValue方法,将启动通信过程。不同的接口有不同的启动方法。使用程序给GetFieldValue方法传送一个引用,该引用指向使用程序中由提供程序调用的例程(例程的引用称为委托)。接着,提供程序就调用使用程序中的例程,把数据传送回使用程序。开始编写提供程序的代码时,可以创建一个方法,给它传送使用程序中的委托。提供程序可以通过委托调用使用程序的例程,把信息传送给使用程序。

void WebControls.WebParts.IWebPartField.FieldValue(

                                     WebControls.WebParts.FieldCallback fld)

                                               

 {

   fld.Invoke(this.BookData);

 }

 string BookData

 {

  get

  {

   return strBookTitle;

  }

 }

使用程序现在可以使用Schema属性提取属性描述器,描述传送给使用程序的数据

提示:

根据属性给使用程序传送PropertyDescriptorCollection的一种替代方式是,创建一个专用对象,来处理所传送的数据。接着,就可以根据这个对象创建PropertyDescriptorCollection,把它传送给提供程序。

[WebControls.WebParts.WebParts.ConnectionProvider("Provides

IWebPartField")]

public WebControls.WebParts.IWebPartField IWebPartFieldProvider()

{

  return this;

}

3. IWebPartField 使用程序

使用程序中的代码必须完成两个任务。
●       必须包含一个由提供程序调用的例程。
●       必须给提供程序传送该例程的一个引用。
在下面的示例中,提供程序调用的例程叫作ReceiveData。IWebPartField Consumer方法调用接口的GetFieldValue方法(该接口传送给IWebPartFieldConsumer方法),给提供程序传送一个指向ReceiveData例程的委托。在C#中,传送例程的名称,就会为该例程创建一个委托。
说明:  这个例程带一个参数:ReceiveData子例程的BookTitle参数。ReceiveData代码使用接口的Schema属性,提取PropertyDescriptor对象,获得使用程序返回的数据描述。在这个例子中,Schema属性返回的PropertyDescriptor用于检查从提供程序返回的数据是否为一个字符串。

WebControls.WebParts.IWebPartField ifld;

[WebControls.WebParts.ConnectionConsumer("IWebPartField Consumer")]

public void IWebPartFieldConsumer(UI.WebControls.WebParts.

IWebPartField fld)

 {

   ifld = fld;

   fld.GetFieldValue(new WebControls.WebParts.FieldCallback(ReceiveData));

}

public void ReceiveData(object BookTitle)

{

 PropertyDescriptor pd;

 pd = ifld.Schema();

 if(pd.PropertyType.Name == "String")

 {

   strTitle = BookTitle.ToString();

 }

}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高三晚上很困怎么办 孩子上高三压力大不想上学怎么办 高三的孩子压力大怎么办 高三复读压力大怎么办 孩子一年级做数学粗心怎么办 一年级的孩子数学总粗心怎么办 天生手脚笨的人怎么办 高三的孩子厌学怎么办 二年级小孩学习笨怎么办 孩子高二不想上怎么办 高三孩子玩手机怎么办 孩子考试粗心丢题怎么办 工作中总出错是怎么办 工作上做错事了怎么办 惹她不开心了怎么办 惹到别人不开心怎么办 孩子高三不愿意写作业怎么办? 小孩特别懒不爱学习怎么办 小孩上三年级不爱学习怎么办 一年级孩子做题粗心怎么办 一年级的孩子做题粗心怎么办 一年级娃娃做题粗心怎么办 有同学抄作业该怎么办 同学要抄我作业怎么办 同桌抄我作业我该怎么办 孩子想换同桌老师不同意怎么办 尴尬的事情心里难受怎么办 孩子撒谎不完成作业怎么办 孩子撒谎不交作业怎么办 孩子不爱写作业撒谎怎么办 大便又粗又硬怎么办 二年级末考紧张怎么办 孩子粗心做数学题老出错怎么办 生地会考考了140怎么办 数学成绩考砸了怎么办? 考砸了家长发火怎么办 大型考试考砸了怎么办 能力考试考砸了怎么办 考砸了老师批评怎么办 英语抽测考砸了老师怎么办? 辅导班学生考砸了老师怎么办