Я не совсем уверен, что понимаю ваш вопрос, особенно в части отображения двух коллекций 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, чтобы понять, что я имею в виду. Это сводило меня с ума в течение последнего часа или около того, и я надеюсь, что другой комментатор может предложить лучший подход ...