需求:编写一个新闻展示的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. FORM当前状态分析

     变量  SYSTEM.RECORD_STATUS 确定当前记录状态.有四种返回值:CHANGED表示记录从数据库取来,并且该记录至少一个基表列被更新:INSERT表示给一个非取自数据库记录的基表 ...

  2. 学习TensorFlow,打印输出tensor的值

    在学习TensorFlow的过程中,我们需要知道某个tensor的值是什么,这个很重要,尤其是在debug的时候.也许你会说,这个很容易啊,直接print就可以了.其实不然,print只能打印输出sh ...

  3. Python读取JSON数据,并解决字符集不匹配问题

    今天来谈一谈Python解析JSON数据,并写入到本地文件的一个小例子. – 思路如下 从一个返回JSON天气数据的网站获取到目标JSON数据串 使用Python解析出需要的部分 写入到本地文件,供其 ...

  4. Servlet之文件上传

    上传表单中的注意事项: 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法 表单 enctype 属性应该设置为multipart/form-data 下面的实例是借助于com ...

  5. Android Demo 下拉刷新+加载更多+滑动删除

    小伙伴们在逛淘宝或者是各种app上,都可以看到这样的功能,下拉刷新和加载更多以及滑动删除,刷新,指刷洗之后使之变新,比喻突破旧的而创造出新的,比如在手机上浏览新闻的时候,使用下拉刷新的功能,我们可以第 ...

  6. 【一天一道LeetCode】#344. Reverse String

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Write a ...

  7. (NO.00003)iOS游戏简单的机器人投射游戏成形记(二十)

    接上一篇文章,我们现在来实现篮框的感应器. 所谓感应器,就是在物体接触到的时候做出反应的节点.我们需要将感应器放在篮框底部,这样子弹接触感应器的时候,我们就知道子弹坠入了篮框,从而得分. 为了放置子弹 ...

  8. 【FPGA学习】Verilog之加法器

    在fpga工程应用设计中,随处可见加法器,乘法器等等.现在将一些常用模块和心得体会先记录下来,以便日后使用. 一位半加器: module halfadder(cout,sum,a,b); output ...

  9. Linux C 下的大文件操作

    这里说的大文件指大小超过4G的文件. 在32位环境下,linux默认打开.读.写超过4G的文件会返回错误.定义如下宏可以突破这个限制,对read/write和fread/fwrite同时有效. 注意它 ...

  10. C语言头文件和库的一些问题

    使用gcc的编译器 头文件没有包含stdlib.h,使用atoi函数(atoi函数在stdlib.h中才有声明),编译却没有出错如果编译的时候加上-Wall选项,会有个警告,请问这是为什么? 这是因为 ...