需求:编写一个新闻展示的WebPart,要求可以分类,类别是从WebService中获取的字符串,要求可以在属性中勾选分类,显示该分类的信息,分类可能会增加。我要做的就是动态生成属性中的新闻类别,至于新闻展示就很简单了。

首先,新建一个WebPart的类,然后添加引用,添加强命名,修改输出路径到bin下,然后加到网站中,引用进去,方便查看效果。

然后,添加另一个类,EditorPart类,我们要做的,就是生成我们的控件,然后重写EditorPart的两个方法,来把类别输出到SharePoint属性面板中去。

protected override void   CreateChildControls()//初始化控件

public override bool   ApplyChanges()//保存设置

public override void   SyncChanges()//初始化EditorPart

        protected override void CreateChildControls()//初始化控件

这个函数,是初始化控件的,编写方法,我们需要的控件,我这里只是需要CheckBox做勾选,还有一个Button做全选。

protected override   void CreateChildControls()

{

string   type = GetTypeStr();

string[]   type2 = type.Split(';');

typecount = type2.Length;

Table   table = new Table();

table.CellPadding = 0;

table.CellSpacing = 0;

table.Style.Add(HtmlTextWriterStyle.Height, "190px");

table.Style.Add(HtmlTextWriterStyle.Width, "200px");

TableRow   row = new TableRow();

TableCell   cell1 = new TableCell();

TableCell   cell2 = new TableCell();

for   (int i = 0; i < type2.Length; i++)

{

cb[i] = new CheckBox();

cb[i].Text = type2[i];

this.Controls.Add(cb[i]);

row = new TableRow();

cell1 = new TableCell();

cell2 = new TableCell();

cell1.Style.Add(HtmlTextWriterStyle.TextAlign, "left");

cell1.Controls.Add(cb[i]);

row.Cells.Add(cell1);

table.Rows.Add(row);

}

btn.Click += new EventHandler(btn_Click);

btn.Text = "全选";

this.Controls.Add(btn);

row = new   TableRow();

cell1 = new   TableCell();

cell2 = new   TableCell();

cell1.Style.Add(HtmlTextWriterStyle.TextAlign, "left");

cell1.Controls.Add(btn);

row.Cells.Add(cell1);

table.Rows.Add(row);

this.Controls.Add(table);

}

      public override bool ApplyChanges()//保存设置

这个函数,是保存我们的变量的,但是需要把要保存的值回传到属性中去,才可以保存,也就是说EditorPart只有一个编辑功能,所以我在属性中声明了一个string类型的Test变量,用来保存。This也就是EditorPart中的参数,而生成的webpart对象,则是属性了。

public override   bool ApplyChanges()

{

this.EnsureChildControls();

MyTestWebPart   webpart = this.WebPartToEdit as MyTestWebPart;

if   (webpart == null) return   false;

webpart.Test = "";

for   (int i = 0; i < this.typecount;   i++)

{

if   (this.cb[i].Checked == true && this.cb[i]   != null)

{

webpart.Test += "1;";

}

else

{

webpart.Test += "0;";

}

}

return   true;

//throw   new NotImplementedException();

}

      public override void SyncChanges()//初始化EditorPart

这个和上面的函数,作用是相反的,也就是EditorPart读取到部件属性的函数,我读取到我的Test变量,然后通过这个变量,再初始化EditorPart的选项,使看起来EditorPart保存了设置一样。

public override   void SyncChanges()

{

EnsureChildControls();

MyTestWebPart   webpart = this.WebPartToEdit as MyTestWebPart;

if   (webpart == null) return;

string   GetTest = webpart.Test;

string[]   GetTestGroup = GetTest.Split(';');

for   (int i = 0; i < GetTestGroup.Length; i++)

{

if   (GetTestGroup[i] == "1")

{

cb[i].Checked = true;

}

}

}

最后,在WebPart中获得编辑界面就可以了。这个就是在部件的属性面板中,初始化EditorPart的函数了,Title也就是属性的标题了。

public override   EditorPartCollection CreateEditorParts()

{

EditorPartCollection   baseParts = base.CreateEditorParts();

List<EditorPart> editorParts = new List<EditorPart>(1);

EditorPart   part = new MyTestEditerPart();

part.ID = this.ID + "_tagValueEditor";

part.Title = "新闻类别";

editorParts.Add(part);

return   new EditorPartCollection(baseParts,   editorParts);

}

声明了一个Test的变量,用来保存EditorPart的值,然后Browsable设置成了false,不让用户看到。呵呵。

private string _Test = "";

[Browsable(false),   FriendlyName("textbox类别"), Category("设置"), Description("请输入类别"), DefaultValue(""),   WebPartStorage(Storage.Shared)]

public string   Test

{

get

{

return   _Test;

}

set

{

_Test = value;

}

}

效果:如下图所示,新闻类别,然后可以类别全选或者取消全选。

部件展示效果:[现在是勾选那个分类,页面上显示那个分类]

*************************************************************************************

作者:霖雨 出处:http://www.cnblogs.com/jianyus 本文版权归 霖雨和博客园共有,欢迎转载,但请注明出处。

SharePoint 部件通过EditorPart自定义属性面板的更多相关文章

  1. 在SharePoint中创建可自定义属性的文件夹

    概况 阅读时间:约5分钟 适用版本:SharePoint Server 2010及以上 面向用户:普通用户.管理员.开发人员 难度指数:★★★☆☆ SharePoint中的文件夹分为2种,一种是文档库 ...

  2. sharepoint部件webparth关闭找回的方法

  3. Sharepoint商务智能学习笔记之PowerPviot Service安装与配置(七)

    1) PowerPviot Service多服务器部署注意事项 PowerPviot Service不是Sharepoint自带的服务,要想使用PowerPviot Service需要先在sharep ...

  4. SharePoint代码段设计

    参考文章: 1. SharePoint 2013设计管理器代码段 https://msdn.microsoft.com/zh-cn/library/jj822367 2. 如何在SharePoint中 ...

  5. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 处理开发者需求

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 处理开发者需求         SharePoint本质上是一个平台.你 ...

  6. Axure基础系列教程

     Axure rp 6.5的软件安装.汉化与注册  认识Axure的软件界面 生成网页原型的三种方法 如何关闭IE浏览器在生成原型时候的安全警告 在chrome中使用axure生成原型的问题 站点地图 ...

  7. 从零开始学Axure原型设计(进阶篇)

    Axure不仅能制作静态的视觉稿.页面,还能添加交互动作,是进行原型设计的最佳软件之一.在认识了Axure的界面和部件库之后,我们可以用它来画线框图了,但是静态的线框图在表达上不如有交互的原型图来得直 ...

  8. unity UGUI实现类似NGUI切换Sprite的方式

    很多都是使用NGUI的习惯,因为在NGUI中所有图片都打包在一个图集中,通过更改SpriteName就可以更改图片,so,为了方便调用UGUI的sprite,我们也同样需要为其创建一个asset文件. ...

  9. 【翻译】Ext JS 5的平板支持

    原文:Ext JS 5 Tablet Support Ext JS已被公认为桌面Web应用程序的领先框架.自从平板开始在全球挑战PC的销售,无论是个人还是企业,电脑横向的应用已经产生急剧的变化.Sen ...

随机推荐

  1. IE下的deflate模式

    浏览器有一个非常有用的特性:自动解压. 在使用AJAX请求数据的时候,数据在服务器端压缩传输,在浏览器端自动解压,请求直接得到解压后的结果. 在Request Header中,一般会列出浏览器支持的压 ...

  2. EBS值集,弹性域常用表

      值集 select * from fnd_flex_value_sets select * from fnd_flex_values select * from fnd_flex_valu ...

  3. 百度地图SDK3.4的使用

    使用过百度地图的开发者应该都知道原始百度地图的开发的基本流程,但是随着百度地图的更新,百度地图的api有了翻天覆地的变化,最新版本的sdk为v3.4 2015年4月14日上线,优化了许多接口的设计,简 ...

  4. Android开发学习之路--RxAndroid之lambda

      RxJava的简单使用基本上也了解了,其实还有一个比较好玩的就是java8才有的lambda了. lambda在android studio下的环境搭建 下载java8   下面就来搭建下这个环境 ...

  5. Xcode7.2中如何添加一个Empty Application模板

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Xcode 6.0正式版之后已经没有所谓的Empty Appl ...

  6. Spring中Bean多种实现切换方案

    一个公共工程中的Spring配置文件,可能会被多个工程引用.因为每个工程可能只需要公共工程中的一部分Bean,所以这些工程的Spring容器启动时,需要区分开哪些Bean要创建出来.另一种场景是:想通 ...

  7. UNIX环境高级编程——线程和fork

    当线程调用fork时,就为子进程创建了整个进程地址空间的副本.子进程通过继承整个地址空间的副本,也从父进程那里继承了所有互斥量.读写锁和条件变量的状态.如果父进程包含多个线程,子进程在fork返回以后 ...

  8. Oracle EBS OM 主要API示例

    1, Book order Oe_Order_Pub.Process_Order ( 1 , Fnd_Api.G_FALSE , Fnd_Api.G_FALSE , Fnd_Api.G_FALSE , ...

  9. 用SpriteBuilder简化"耕牛遍地走"的动画效果(三)

    接下来的代码和原文差不多,建立一个数组用来存放动画帧,然后用数组来初始化一个CCAnimation动画对象.接着将牛放在屏幕中心,然后运行动画: NSMutableArray *walkAnimFra ...

  10. javascript之自定义数组工具对象

    <pre name="code" class="html">/* 需求:编写一个js文件,在js文件中自定义一个数组工具对象, 该工具对象要有一个找 ...