如何使用SharePoint MultipleLookupField控件?
我想在将在SharePoint上下文中运行的网页中使用MultipleLookupField控件。我想知道是否有人可以帮我提供一个示例,该示例逐步显示了如何使用控件两个显示两个SPField集合。
解决方案
回答
我不太确定我是否理解问题,尤其是有关显示两个SPField集合的问题。抱歉,这真是一个完全不同的问题的答案!
无论如何,这是在Web部件中使用MultipleLookupField的快速演示演练。
创建一个团队站点。将一些任务添加到任务列表。还将文档放入共享文档库中。在共享文档库中创建一个新列;称为"相关",使其成为"任务"列表的"标题"字段中的查找,并允许多个值。
现在创建一个Web部件,执行所有常用的样板,然后添加以下内容:
Label l; MultipleLookupField mlf; protected override void CreateChildControls() { base.CreateChildControls(); SPList list = SPContext.Current.Web.Lists["Shared Documents"]; if (list != null && list.Items.Count > 0) { LiteralControl lit = new LiteralControl("Associate tasks to " + list.Items[0].Name); this.Controls.Add(lit); mlf = new MultipleLookupField(); mlf.ControlMode = SPControlMode.Edit; mlf.FieldName = "Related"; mlf.ItemId = list.Items[0].ID; mlf.ListId = list.ID; mlf.ID = "Related"; this.Controls.Add(mlf); Button b = new Button(); b.Text = "Change"; b.Click += new EventHandler(bClick); this.Controls.Add(b); l = new Label(); this.Controls.Add(l); } } void bClick(object sender, EventArgs e) { l.Text = ""; foreach (SPFieldLookupValue val in (SPFieldLookupValueCollection)mlf.Value) { l.Text += val.LookupValue.ToString() + " "; } SPListItem listitem = mlf.List.Items[0]; listitem["Related"] = mlf.Value; listitem.Update(); mlf.Value = listitem["Related"]; } protected override void OnInit(EventArgs e) { base.OnInit(e); EnsureChildControls(); }
诚然,这是边界荒谬的-一切都是硬编码的,根本没有错误处理,并且没有任何用处-但这仅是一个快速演示。现在,构建并部署该Web部件,并将其实例添加到团队站点的主页;它应该允许我们获取和设置与库中第一个文档相关的任务。
如果我们希望UI与实际列表值保持同步,则似乎需要单击Click处理程序末尾的奇怪位,在这里我们从mlf.Value中读取一个值,然后再次将其写回。尝试省略bClick的最后一行,以了解我的意思。在过去约一个小时的时间里,这一直困扰着我,我希望其他评论者可以提出一种更好的方法...
回答
嗯在我的机器上工作正常,所以让我们看看能否确定设置有何不同...
似乎在填充控件时遇到了麻烦;我的第一个猜测是,这是因为代码对要与之交谈的列表做出了很多假设。我们能否检查一下我们是否拥有普通的Team Team网站(假设这些名称区分大小写):
- 名为"任务"的列表,其中包含多个项目
- 一个名为"共享文档"的库,其中至少有一个文档
- 共享文档库中名为"相关"的列
- "相关"列是"任务"的"标题"列中的"查找"字段,并且允许多个值。
- 共享文档中的第一个文档具有"相关"的值
然后添加Webpart。手指交叉...
回答
嗯好的,我仍在尝试破坏我的权限...所以我进入了layouts目录并创建了一个文件foo.aspx。这里是:
<%@ Page Language="C#" Inherits="System.Web.UI.Page" MasterPageFile="~/_layouts/simple.master" %> <%@ Register Tagprefix="foo" Namespace="Foople" Assembly="Foople, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"%> <asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> <foo:WebPart1 id="fred" runat="server" /> <foo:WebPart1a id="barney" runat="server" /> </asp:Content>
WebPart1是之前的Webpart。 WebPart1a是完全相同的代码,但是在直接从WebControl而不是从WebPart继承的类中。
除了可以回发调试的安全性验证问题外,它的工作原理还不错。
将母版页更改为〜masterurl / default.master,我将foo.aspx上传到共享文档库,并且从那里也可以正常工作-WebControl和WebPart的行为均正常,并且安全问题也消失了。
所以我很茫然。尽管我确实注意到此页面带有一个晦涩的可能是bug,但它也位于SPFolder.get_ContentTypeOrder()中:http://forums.msdn.microsoft.com/zh-CN/sharepointdevelopment/thread/63baf273-7f36-453e- 8293-26417759e2e1 /
我们有机会发布代码吗?