1

我想在将在 SharePoint 上下文中运行的网页中使用 MultipleLookupField 控件。我想知道是否有人会帮助我举一个例子,它逐步展示了如何使用控件两个显示两个 SPField 集合。

4

3 回答 3

2

我不完全确定我理解你的问题,尤其是关于显示两个 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 的最后一行以了解我的意思。在过去的一个小时左右,这一直让我发疯,我希望另一位评论者能提出更好的方法......

于 2008-09-02T23:46:21.087 回答
0

嗯。我的工作正常,所以让我们看看我们是否可以弄清楚你的设置有什么不同......

看起来好像在填充控件时遇到了问题;我的第一个猜测是,这是因为代码对它正在与之交谈的列表做了很多假设。您能否检查一下您是否有一个普通的香草团队网站,其中(假设这些名称区分大小写):

  1. 一个名为 Tasks 的列表,其中包含多个项目
  2. 一个名为 Shared Documents 的库,其中至少包含一个文档
  3. 共享文档库中名为“相关”的列
  4. 相关列是任务标题列中的查找字段,并允许多个值。
  5. Shared Documents 中的第一个文档的值为 Related

然后添加 Web 部件。手指交叉...

于 2008-09-03T10:47:11.030 回答
0

嗯。好的,我仍在尝试破坏我的...所以我转到布局目录并创建了一个文件 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/

你有机会发布你的代码吗?

于 2008-09-05T00:15:56.613 回答