网站首页/办公软件列表/内容

SharePoint 如何部件通过EditorPart自定义属性面板

办公软件2024-02-08阅读
SharePoint发行版本有SharePoint2003、SharePoint2007、Sharepoint 2010、SharePoint2013和SharePoint2016。SharePoint提供了功能强大的团队协作环境,使得组织能够在整个组织内部实现整合、组织、查找和提供 SharePoint站点。

?????需求:编写一个新闻展示的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;="">

??????????? {

??????????????? 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;="" ?="">

??????????? {

??????????????? 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;="">

??????????? {

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

??????????????? {

??????????????????? cb[i].Checked = true;

??????????????? }

??????????? }

??????? ? }

?

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

??????? ? public override ? EditorPartCollection CreateEditorParts()

??????? ? {

??????????? EditorPartCollection ? baseParts = base.CreateEditorParts();

??????????? List editorParts = new List(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;

??????????? }

??????? ? }

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

SharePoint 如何部件通过EditorPart自定义属性面板_本站

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

SharePoint 如何部件通过EditorPart自定义属性面板_本站

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


Sharepoint 可以帮助企业用户轻松完成日常工作。

……

相关阅读