Используйте Web Money - это очень удобно

среда, 16 января 2008 г.

Поле - деревянный список для списка Shrepoint из списка. продолжение.

Пришлось довольно много помучиться, да и другой работы было много.
Итак:
1.Создаем свое поле:
две колонки в одной храним имена в другом значения ИД из списка источника. Отображаем только первую колонку.
как сделать:Блог Сергея Шаповалова
Что добавить:
берем из ascx дерево
TreeView1 = (TreeView)TemplateContainer.FindControl("TreeView1");
берем параметры:
_listTreeView = Field.GetCustomProperty("ListName").ToString();
_nodeNameField = Field.GetCustomProperty("FieldName").ToString();
_parentIdField = Field.GetCustomProperty("FieldParentID").ToString();

Работа с полем:
public override object Value
{
get
{
EnsureChildControls();
SPFieldTreeFieldValue fieldValue = new SPFieldTreeFieldValue();
count = 0;
_names = "";
_text = "";
parent = TreeView1.Nodes[0];
ReturnCheckedNames(parent);
fieldValue.Names = _names;
fieldValue.Index = _text;
return fieldValue;
}
set
{
EnsureChildControls();
SPFieldTreeFieldValue fieldValue = (SPFieldTreeFieldValue)value;
ValueBox.Text = fieldValue.Names;
_text = fieldValue.Index;
try
{
FillTreeView();
}
catch { }

}
}
FillTreeView() - заполнение контрола TreeView.
(Моя реализация великовата для этого блога, но думаю что особых проблем с этим быть не должно.)
- определяем заполнение поля
(ReturnCheckedNames(parent); - то как вы запишите выделенные элементы в строку.
использую глобальные переменные т.к. в своем методе использую рекурсию для перебора ChildNodes)
Names - вместо prefix:

2.У поля должны быть свойства в которых указаны: список источник, поле с именами и поле ParentId.
fldtypes_TreeField.xml

^propertyschema^
^fields^
^field name="ListName" displayname="ListName" displaysize="20" type="Text"^
^/field^
^field name="FieldName" displayname="FieldName" displaysize="20" type="Text"^
^/field^
^field name="FieldParentID" displayname="FieldParentID" displaysize="20" type="Text"^
^/field^
^/fields^
^/propertyschema^
Отображаем только первую колонку:
^renderpattern name="DisplayPattern"^
^switch^
^expr^
^column/^
^/expr^
^case value=""^
^/case^
^default^
^column subcolumnnumber="0" htmlencode="TRUE"^
^/default^
^/switch^
^/renderpattern^
3.У поля должен быть собственный контрол редактирования treeView и скриптом обработки логики вашего дерева(при необходимости).
ControlTemplates_TreeFieldFieldControl.ascx
Добавляем.
^asp:treeview id="TreeView1" runat="server"^^/asp:treeview^
P.S. при использовании скриптов для реализации "активных" checkBox'ов в дереве приходится использовать ид элементов он формируется следующим образом:
prefix+"TreeView1n"+(i)+"CheckBox"
prefix - сгенерированный sharepoint ключ добавляемый к иду вашего контрола
Для получения:
var prefix
1. Создать функцию на onLoad одного из элементов ascx вашего поля.
В функцию в качестве параметра нужно передавать this.
Потом брать его ид и отрезать конец - известный вам ид элемента, ну и записывать его в глобальную переменную prefix.
i - порядковый номер сквозной сверху в низ ноды дерева. Т.Е. для рутовой ноды это 0, для первого child это 1 для первого child.child это 2 и т.д. Поэтому в скрипте (да и в коде) имеет смысл работать со сквозной нумерацией, после первого заполнения дерева (а не с шарепоинтовскими идами).
"TreeView1n"+(i)+"CheckBox" - формирует ид checkBox в дереве(TreeView1 - ид дерева).
С удовольствием отвечу на комментарии.

Комментариев нет: