如何使用SharePoint MultipleLookupField 控件?
-
09-06-2019 - |
题
我想在将在 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 的最后一行来看看我的意思。在过去一个小时左右的时间里,这让我抓狂,我希望另一位评论者能想出更好的方法......
其他提示
嗯。在我的上运行良好,所以让我们看看是否可以找出您的设置有何不同......
看起来填充控件时遇到了问题;我的第一个猜测是,这是因为代码对其所涉及的列表做出了很多假设。您能否检查一下您是否有一个普通的团队网站(假设这些名称区分大小写):
- 名为“任务”的列表,其中包含多个项目
- 一个名为“共享文档”的库,其中至少有一个文档
- 共享文档库中名为“相关”的列
- “相关”列是任务“标题”列中的查找字段,并允许多个值。
- 共享文档中的第一个文档具有相关值
然后添加 Web 部件。手指交叉...
嗯。好吧,我还在努力打破我的...所以我进入布局目录并创建了一个文件 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 是之前的 Web 部件。WebPart1a 是完全相同的代码,但位于直接继承自 WebControl 而不是 WebPart 的类中。
它工作得很好,除了回发时的安全验证问题,我懒得去调试。
将母版页更改为 ~masterurl/default.master,我将 foo.aspx 上传到共享文档库,并且从那里也可以正常工作 - WebControl 和 WebPart 都运行正常,并且安全问题也消失了。
所以我很茫然。尽管我确实注意到此页面有一个模糊的可能是错误的错误,该错误也位于 SPFolder.get_ContentTypeOrder() 中: http://forums.msdn.microsoft.com/en-US/sharepointdevelopment/thread/63baf273-7f36-453e-8293-26417759e2e1/
您有机会发布您的代码吗?