以编程方式基于列在sharepoint中创建树视图

use*_*929 5 c# linq treeview sharepoint sharepoint-2010

我必须为SharePoint开发一个Web部件,用于读取列表并创建树视图.

树视图必须按如下方式组织:根(或根)将由表示类别的选择字段创建,例如Drinks,子节点是包含该类别的行的名称,树视图必须以编程方式创建.

List:
Title(string)       Category(Choice)
Coke            Drinks
Beer            Drinks
Fish            Food
Chips           Food

Would produce this:
Drinks
    Coke
    Beer
Food
    Fish
    Chips
Run Code Online (Sandbox Code Playgroud)

我到目前为止的代码

  TreeView treeView;
    TreeNode rootNode;
    TreeNode childNode;


    protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
    {
        // render the control
        base.RenderContents(writer);
    }

    protected override void CreateChildControls()
    {
        List<TreeNode> items = new List<TreeNode>();

        base.CreateChildControls();

        // get the current site
        using (SPSite Site = new SPSite(SPContext.Current.Site.Url + "/UberWiki"))
        {
            using (SPWeb currentWeb = Site.OpenWeb())
            {

                // set the tree view properties



                SPList list = currentWeb.Lists["Pages"];

                SPFieldChoice field = (SPFieldChoice)list.Fields["Categories"];

                foreach (string str in field.Choices)
                {
                    treeView = new System.Web.UI.WebControls.TreeView();
                    rootNode = new System.Web.UI.WebControls.TreeNode(str);
                    treeView.Nodes.Add(rootNode);

                    foreach (SPListItem rows in list.Items)
                    {
                        childNode = new System.Web.UI.WebControls.TreeNode(rows.Title);
                        treeView.Nodes.Add(childNode);
                    }
                }
            }
            this.Controls.Add(treeView);
            base.CreateChildControls();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Aqu*_*nds 0

另一种解决方案,无需清理多选字符串值

using (SPSite Site = new SPSite(SPContext.Current.Site.Url + "/UberWiki"))
{
    using (SPWeb currentWeb = Site.OpenWeb())
    {
        // set the tree view properties
        SPList list = currentWeb.GetList(currentWeb.Url+"/Lists/Pages");

        SPFieldChoice field = (SPFieldChoice)list.Fields["Categories"];
        treeView = new System.Web.UI.WebControls.TreeView();

        // Add root nodes
        foreach (string str in field.Choices)
        {
            rootNode = new System.Web.UI.WebControls.TreeNode(str);
            treeView.Nodes.Add(rootNode);                        
        }

        // Add child nodes
        foreach (SPListItem rows in list.Items)
        {
            childNode = new System.Web.UI.WebControls.TreeNode(rows["Title"].ToString());
            treeView.FindNode(rows["Categories"].ToString()).ChildNodes.Add(childNode);
        }
    }
    this.Controls.Add(treeView);
    base.CreateChildControls();
}
Run Code Online (Sandbox Code Playgroud)