26/11/2024 11:13 ExtendedLookupFieldEditor.
cs
using System;
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
namespace [Link]
{
/// <summary>
/// Control used for creating and editing the <see
cref="T:[Link]"/> field's settings.
/// </summary>
public class ExtendedLookupFieldEditor : UserControl, IFieldEditor
{
#region Private Members
private const string TEXT_FIELD = "Value";
private const string VALUE_FIELD = "Key";
private string _errorMsg;
private ExtendedLookupFieldType _extendedLookupFieldType;
#endregion Private Members
#region Protected Members
protected Literal litSectionTitle;
protected Literal litSectionDescription;
protected Literal litWebForList;
protected Literal litLookupList;
protected Literal litDisplayColumn;
protected Label lblSelectedWebForList;
protected Label lblSelectedLookupList;
protected Label lblSelectedDisplayColumn;
protected DropDownList ddlWebForList;
protected DropDownList ddlLookupList;
protected DropDownList ddlDisplayColumn;
protected CheckBox chkAllowMultipleItems;
protected InputFormRequiredFieldValidator validator_ddlWebForList;
protected InputFormRequiredFieldValidator validator_ddlLookupList;
protected InputFormRequiredFieldValidator validator_ddlDisplayColumn;
#endregion Protected Members
#region Initialisation
protected override void OnInit(EventArgs e)
{
[Link](e);
ApplyResourceValues();
InitialiseControls();
}
#endregion Initialisation
#region IFieldEditor Members
public void InitializeWithField(SPField field)
{
_extendedLookupFieldType = field as ExtendedLookupFieldType;
if ([Link])
return;
[Link] cloud/[Link] 1/5
26/11/2024 11:13 [Link]
if (_extendedLookupFieldType != null)
{
// Only allow editing for new columns, unless the list\columns defined no longer
exist
if (_extendedLookupFieldType.WebSourceId != [Link])
{
using (SPWeb web =
[Link](_extendedLookupFieldType.WebSourceId))
{
[Link] = [Link];
[Link] = true;
[Link] = false;
validator_ddlWebForList.Enabled = false;
SPList lookupList = (from list in [Link]<SPList>()
where
[Link](_extendedLookupFieldType.LookupListId)
select list).SingleOrDefault();
if (lookupList != null)
{
SetAsReadOnly(lblSelectedLookupList, [Link], ddlLookupList,
validator_ddlLookupList);
if
([Link](_extendedLookupFieldType.DisplayColumnId))
{
SPField displayColumn =
[Link][_extendedLookupFieldType.DisplayColumnId];
SetAsReadOnly(lblSelectedDisplayColumn, [Link],
ddlDisplayColumn, validator_ddlDisplayColumn);
}
else
{
SetAsNotFoundError(lblSelectedDisplayColumn, "Previously
configured display field was not found, please update.", ddlDisplayColumn);
BindDisplayColumns(lookupList);
}
}
else
{
SetAsNotFoundError(lblSelectedLookupList, "Previously configured
lookup list was not found, please update.", ddlLookupList);
BindLookupList();
}
}
}
}
}
public void OnSaveChange(SPField field, bool bNewField)
{
ExtendedLookupFieldType extendedLookupFieldType = field as ExtendedLookupFieldType;
if (DropDownListHasSelectedItem(ddlWebForList))
[Link] = new Guid([Link]);
if (DropDownListHasSelectedItem(ddlLookupList))
[Link] = new Guid([Link]);
if (DropDownListHasSelectedItem(ddlDisplayColumn))
[Link] = new
Guid([Link]);
public bool DisplayAsNewSection
{
get
{
[Link] cloud/[Link] 2/5
26/11/2024 11:13 [Link]
return true;
}
}
#endregion IFieldEditor Members
#region Binding
private void BindWebForList()
{
Dictionary<Guid, string> webs =
[Link]([Link]);
BindList(ddlWebForList, webs);
}
private void BindLookupList()
{
Dictionary<Guid, string> lists =
[Link]([Link], [Link]);
BindList(ddlLookupList, lists);
}
private void BindDisplayColumns(SPList list)
{
const string DEFAULT_COLUMN = "Title";
Dictionary<Guid, string> fields = [Link](list,
[Link]);
BindList(ddlDisplayColumn, fields);
SetSelectedItemForDropDownList(ddlDisplayColumn, DEFAULT_COLUMN);
}
private void BindList(DropDownList dropDownList, Dictionary<Guid, string> dataSource)
{
[Link] = dataSource;
[Link] = TEXT_FIELD;
[Link] = VALUE_FIELD;
[Link]();
}
private void SetSelectedItemForDropDownList(DropDownList dropDownList, string
selectedItem)
{
if ([Link] == 0)
return;
ListItem listItem = [Link](selectedItem);
if (listItem != null)
{
[Link] = [Link](listItem);
}
else
{
[Link] = 0;
}
}
private void DropDownList_OnDataBound(object sender, EventArgs e)
{
((DropDownList)sender).[Link](0, new ListItem([Link], [Link]));
}
#endregion Binding
#region Private Methods
private void SetAsReadOnly(Label itemLabel, string itemText, DropDownList dropDownList,
InputFormRequiredFieldValidator validator)
[Link] cloud/[Link] 3/5
26/11/2024 11:13 [Link]
{
[Link] = itemText;
[Link] = true;
[Link] = false;
[Link] = false;
}
private void SetAsNotFoundError(Label itemLabel, string error, DropDownList dropDownList)
{
[Link] = error;
[Link] = "ms-error";
[Link] = true;
[Link] = true;
}
private bool DropDownListHasSelectedItem(DropDownList dropDownList)
{
return [Link] != null &&
;
}
private void ApplyResourceValues()
{
[Link] = "Lookup Column Settings";
[Link] = "Specify the lookup web, list, and display column.";
[Link] = "Source web to get information from:";
[Link] = "Get information from:";
[Link] = "In this column:";
[Link] = "Allow multiple values";
validator_ddlWebForList.ErrorMessage = "You must select a web as the source for the
lookup field.";
validator_ddlLookupList.ErrorMessage = "You must select a list as the source for the
lookup field.";
validator_ddlDisplayColumn.ErrorMessage = "You must select a disp;ay column from the
lookup list.";
}
private void InitialiseControls()
{
[Link] += DropDownList_OnDataBound;
[Link] += DropDownList_OnDataBound;
if (!IsPostBack)
{
BindWebForList();
[Link] = false;
[Link] = false;
}
}
private void EnableColumnDropDownLists()
{
[Link] = [Link] > 0;
if (![Link])
{
[Link]();
}
}
private void DisableColumnControl()
{
[Link] = false;
[Link]();
[Link] = false;
}
#endregion Private Methods
#region Rendering
[Link] cloud/[Link] 4/5
26/11/2024 11:13 [Link]
protected override void Render(HtmlTextWriter writer)
{
if ()
{
[Link]([Link]("<p class='ms-error'>{0}</p>", _errorMsg));
return;
}
[Link](writer);
}
#endregion Rendering
#region Events
protected void ddlWebForListOnSelectedIndexChanged(object sender, EventArgs eventArgs)
{
DropDownList dropDownList = sender as DropDownList;
if ([Link] != null && [Link]())
{
BindLookupList();
[Link] = false;
[Link] = true;
[Link] = true;
[Link] = false;
validator_ddlLookupList.Enabled = true;
}
else
{
[Link]();
[Link] = false;
DisableColumnControl();
}
}
protected void ddlLookupListOnSelectedIndexChanged(object sender, EventArgs eventArgs)
{
DropDownList dropDownList = sender as DropDownList;
if ([Link] != null && [Link]())
{
Guid webId = (DropDownListHasSelectedItem(ddlWebForList)) ? new
Guid([Link]) : _extendedLookupFieldType.WebSourceId;
Guid listId = new Guid([Link]);
using (SPWeb web = [Link](webId))
{
SPList list = [Link](listId, false);
BindDisplayColumns(list);
}
[Link] = false;
EnableColumnDropDownLists();
}
else
{
DisableColumnControl();
}
}
#endregion Events
}
}
[Link] cloud/[Link] 5/5