Как использовать элемент управления SharePoint MultipleLookupField? - PullRequest
1 голос
/ 02 сентября 2008

Я хочу использовать элемент управления MultipleLookupField на веб-странице, которая будет работать в контексте SharePoint. Мне было интересно, если кто-нибудь поможет мне с примером, который показывает шаг за шагом, как использовать элемент управления два отображения двух коллекций SPField.

Ответы [ 3 ]

2 голосов
/ 03 сентября 2008

Я не совсем уверен, что понимаю ваш вопрос, особенно в части отображения двух коллекций SPField. Извините, если это окажется ответом на совершенно другой вопрос!

В любом случае, мы рассмотрим краткую демонстрацию использования MultipleLookupField в веб-части.

Создать сайт команды. Добавьте несколько задач в список задач. Также поместите документ в библиотеку общих документов. Создайте новый столбец в библиотеке общих документов; назовите его «Связанный», укажите его в поле «Заголовок» списка «Задачи» и разрешите несколько значений.

Теперь создайте веб-часть, выполните все обычные шаблоны и добавьте следующее:

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();
}

Конечно, это нелепо - все жестко запрограммировано, обработка ошибок вообще не предусмотрена, и она не служит никакой полезной цели - но она предназначена только для быстрой демонстрации. Теперь создайте и разверните эту веб-часть и добавьте ее экземпляр на домашнюю страницу сайта своей группы; он должен позволять вам получать и устанавливать задачи, связанные с первым документом в библиотеке.

Странный бит в конце кнопки Обработчик щелчка, где мы читаем значение из mlf.Value и затем записываем его снова, кажется необходимым, если вы хотите, чтобы пользовательский интерфейс синхронизировался с фактическими значениями списка. Попробуйте пропустить последнюю строку bClick, чтобы понять, что я имею в виду. Это сводило меня с ума в течение последнего часа или около того, и я надеюсь, что другой комментатор может предложить лучший подход ...

0 голосов
/ 05 сентября 2008

Hm. Хорошо, я все еще пытаюсь сломать мой ... поэтому я пошел в каталог раскладок и создал файл 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 - это веб-часть, созданная ранее. 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/

Есть ли шанс, что вы могли бы опубликовать свой код?

0 голосов
/ 03 сентября 2008

Hm. Хорошо работает на моем, так что давайте посмотрим, сможем ли мы выяснить, как ваши настройки отличаются ...

Похоже, у него проблемы с заполнением элемента управления; Мое первое предположение было бы, потому что код делает так много предположений о списках, с которыми он говорит. Можете ли вы проверить, что у вас есть простой ванильный сайт Team с (предположите, что эти имена чувствительны к регистру):

  1. Список, называемый Задачами, с несколькими элементами в нем
  2. Библиотека с именем Shared Documents, содержащая хотя бы один документ
  3. Столбец «Связанные» в библиотеке общих документов
  4. Связанный столбец представляет собой поле «Уточняющий запрос» в столбце «Задачи» и допускает несколько значений.
  5. Первый документ в общих документах имеет значение для Связанные

Затем добавьте веб-часть. Скрестив пальцы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...