首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用SharePoint MultipleLookupField控件?

如何使用SharePoint MultipleLookupField控件?
EN

Stack Overflow用户
提问于 2008-09-02 16:14:07
回答 3查看 5.5K关注 0票数 1

我想在将在SharePoint上下文中运行的网页中使用MultipleLookupField控件。我想知道是否有人可以帮我举一个例子,它一步一步地展示了如何使用控件two display two SPField Collections。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-09-02 23:46:21

我不能完全理解你的问题,特别是关于显示两个SPField集合的问题。很抱歉,如果这是一个完全不同的问题的答案!

无论如何,这里有一个在web部件中使用MultipleLookupField的快速演示。

创建一个工作组网站。在任务列表中添加一些任务。还可以将文档放入共享文档库。在共享文档库中创建一个新列;将其命名为"Related",使其成为Tasks列表的Title字段的Lookup,并允许多个值。

现在创建一个web部件,执行所有常见的样板操作,然后添加以下内容:

代码语言:javascript
运行
复制
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与实际列表值保持同步,则需要从mlf.Value读取值,然后再将其写回。试着省略bClick的最后一行,明白我的意思。在过去的一个小时左右,这让我抓狂,我希望另一个评论者能想出一个更好的方法……

票数 2
EN

Stack Overflow用户

发布于 2008-09-03 10:47:11

嗯。在我的上运行得很好,所以让我们看看我们是否可以弄清楚你的设置是如何不同的……

它似乎在填充控件时遇到了问题;我的第一个猜测是,这是因为代码对它正在与之对话的列表做了太多假设。你能检查一下你是否有一个普通的团队站点,(假设这些名称区分大小写):

  1. 一个名为Tasks的列表,其中包含多个项目
  2. 一个名为Shared Documents的库,其中至少有一个document
  3. 在Shared Documents library
  4. 中有一个名为Related的列。Related列是任务标题列的查阅字段,允许使用多个值。
  5. 共享文档中的第一个文档具有Related的值

然后添加the部件。祈祷吧..。

票数 0
EN

Stack Overflow用户

发布于 2008-09-05 00:15:57

嗯。好吧,我还在试着打破我的.因此,我转到布局目录并创建了一个文件foo.aspx。这就是它:

代码语言:javascript
运行
复制
<%@ 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是之前的the部件。WebPart1a是完全相同的代码,只不过是在一个直接从WebControl而不是从WebPart继承的类中。

它工作得很好,除了回发上的安全验证问题,我不想费心去调试。

将母版页更改为~ WebControl /default.master,我将foo.aspx上传到了共享文档库,并且从那里也可以很好地工作-- WebControl和WebPart都运行正常,而且安全问题也消失了。

所以我有点不知所措。虽然我确实注意到这个页面有一个模糊的可能是错误的页面,它也在SPFolder.get_ContentTypeOrder()中:http://forums.msdn.microsoft.com/en-US/sharepointdevelopment/thread/63baf273-7f36-453e-8293-26417759e2e1/

你有没有可能发布你的代码?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档