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

пятница, 18 января 2008 г.

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

Доброго времени суток!
Довел работу до логического завершения.
Добавил редактор поля:
Добавляем в определение поля (fldtypes_TreeField.xml)
^Field Name="FieldEditorUserControl"^ /_controltemplates/ControlTemplates_TreeFieldFieldEditorControl.ascx^/Field^
+ в свойства PropertySchema добавляем Hidden="TRUE" - что бы отображался только мой контрол.
Далее создаем
public class TreeFieldEditor : UserControl, IFieldEditor
и переопределяем методы
public bool DisplayAsNewSection
{
get { return false; }
}

public void InitializeWithField(Microsoft.SharePoint.SPField field)
{
}

public void OnSaveChange(Microsoft.SharePoint.SPField field, bool isNewField)
{
}
и
protected override void CreateChildControls()
{

base.CreateChildControls();

TreeFieldTargetList.SelectedIndexChanged += new EventHandler(TreeFieldTargetList_SelectedIndexChanged);
if (!this.Page.IsPostBack)
{
FillDDL(); //- заполняем dropDownLists
}

и контрол
Control Language="C#" Inherits="TreeField.TreeFieldEditor, TreeField, Version=1.0.0.0, Culture=neutral, PublicKeyToken=!!!" AutoEventWireup="false" compilationMode="Always"
Переделал из LookUp контрола.
Откопал полезный вариант свойств поля: - удобно обращаться напрямую.
public SPTreeFieldField(SPFieldCollection fields, string fieldName)
: base(fields, fieldName)
{
this.Init();
}

public SPTreeFieldField(SPFieldCollection fields, string typeName, string displayName)
: base(fields, typeName, displayName)
{
this.Init();
}
private void Init()
{
this.ListName = this.GetCustomProperty("ListName") + "";
}

public override void Update()
{
this.SetCustomProperty("ListName", this.ListName);
base.Update();
}
private string listName;
public string ListName
{
get
{
return this.listName;
}
set
{
this.listName = value;
}
}
Хорошая ссылка по теме чел делает связанные дропдаунлисты
Пример кода и готовый солюшн

6 комментариев:

Анна Пожидаева комментирует...

Здравствуйте! а не могли бы по подробней описать где это все прописывать надо?
у меня есть Список там два поля Lookup я хочу для этого списка сделать дерево, не подскажите как надо сделать?

Gleb комментирует...

Это необходимо делать в Visual Studio. Вам необходимо создать проект для Sharepoint. И выбрать там CustomField.

Анна Пожидаева комментирует...
Этот комментарий был удален автором.
Анна Пожидаева комментирует...
Этот комментарий был удален автором.
Анна Пожидаева комментирует...

А это сам Treeview:

TreeView tree = new TreeView();
SPListItemCollection Services = GetYServices();
foreach (SPItem ServiseType in Services)
{
TreeNode nodeServiseType = new TreeNode(ServiseType.Fields["Title"].ToString(), ServiseType.ID.ToString(), null, "", "_self");
tree.Nodes.Add(nodeServiseType);
SPListItemCollection VidServices = GetVidServices(ServiseType.ID);
foreach (SPItem VidServic in VidServices)
{
TreeNode nodeVidServic = new TreeNode(VidServic.Fields["Title"].ToString(), ServiseType.ID.ToString(), null, "", "_self");
nodeVidServic.ChildNodes.Add(nodeVidServic);

Анна Пожидаева комментирует...

Спасибо) можно я покажу свой код, а вы скажите правильно это или нет, если Вам не сложно?
У меня есть 3 таблицы: Services в нем поля(ServiseType),VidServices(VidServic),И таблица YServices в которой подставляются 2 поля из 2 таблиц Services и VidServices

TreeView treeView;
TreeNode rootNode;


public static SPListItemCollection GetYServices()
{
SPListItemCollection items;

SPSite siteCollection = new SPSite("http://http://spdev01/");
SPWeb web = siteCollection.RootWeb;
items = web.Lists["YServices"].GetItems();
return items;
}

public SPListItemCollection GetServices(int ServiseTypeid)
{
SPListItemCollection items;
SPSite siteCollection = new SPSite("http://http://spdev01/");
SPWeb web = siteCollection.RootWeb;

string queryString = "" + ServiseTypeid + "";

SPQuery query = new SPQuery(web.Lists["YServices"].DefaultView);
query.Query = queryString;
items = web.Lists["YServices"].GetItems(query);
return items;
}
public SPListItemCollection GetVidServices(int Vidcervicid)
{
SPListItemCollection items;
SPSite siteCollection = new SPSite("http://http://spdev01/");
SPWeb web = siteCollection.RootWeb;

string queryString = "" + Vidcervicid + "";
SPQuery query = new SPQuery(web.Lists["VidServices"].DefaultView);
query.Query = queryString;
items = web.Lists["VidServices"].GetItems(query);
return items;