需求:编写一个新闻展示的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. DOM4J生成、解析XML实例

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterato ...

  2. 安装解压版本的MySQL,安装过程中的常见命令,检查windows系统错误日志的方式来检查MySQL启动错误,关于Fatal error: Can't open and lock privilege

     以端口 port = 3306 # 设置mysql的安装目录 basedir=D://Installed//mysql-5.6.26-winx64//mysql-5.6.26-winx64 # ...

  3. UNIX网络编程——send与recv函数详解

    #include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags); ssize_ ...

  4. Xcode7 真机免证书调试Cocos2D游戏

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 经过一番实验,现在终于可以在Xcode7上免证书真机调试了: ...

  5. 任务执行器——Executor

    上节说到接收器Acceptor在接收到socket后会有一系列简单的处理,其中将socket扔进线程池是最重要的一步,线程池是一个怎样东西?其原理在前面的"线程池原理"章节已经说明 ...

  6. android studio——Failed to set up SDK

    最近使用android studio ,在IDE里面使用Gradle构建的时候,一直出现构建失败,失败信息显示Failed to set up SDK.然后 提示无法找到andriod-14平台,我更 ...

  7. App会取代网站吗?

    本文摘自<程序员的修炼:从优秀到卓越>,购买链接:http://product.china-pub.com/3769829 自1999年以来,不管是作为买家还是卖家,我一直是eBay的热心 ...

  8. 使用CocoaPods创建Pod

    本来想给App评分,好的开源组件没有Swift版,如是自己写了个简易的.想着既然写了,就写完善点,提供给需要的人使用.这样SwiftyiRate诞生了. 下面主要说下创建pod的步骤: 一.创建git ...

  9. Leetcode_119_Pascal's Triangle II

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41851069 Given an index k, retu ...

  10. linux 下停止java jar包 shell

    linux 下停止java jar包 shell http://injavawetrust.iteye.com #!/bin/sh APP_HOME=/home/ap/injavawetrust/ba ...