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

5

我需要为SharePoint开发一个Web部件,该部件可以读取列表并创建树形视图。

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

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

Would produce this:
Drinks
    Coke
    Beer
Food
    Fish
    Chips

目前我所拥有的代码

  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();
        }
    }

你能将不允许在WebPart中的代码部分分离出来,并为TreeNode创建一个单独的C#类吗? - MethodMan
2个回答

3

找到了解决方案:

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

                                SPList list = currentWeb.Lists["Pages"];
                                SPFieldChoice field = (SPFieldChoice)list.Fields["Categories"];

                                treeView = new System.Web.UI.WebControls.TreeView();

                                foreach (string str in field.Choices)
                                {

                                    treeNode = new System.Web.UI.WebControls.TreeNode(str);

                                    foreach (SPListItem rows in list.Items)
                                    {
                                        SPFieldMultiChoiceValue multiChoice = new SPFieldMultiChoiceValue(Convert.ToString(rows["Wiki Categories"]));

                                        string input = multiChoice.ToString();
//remove the ;# that comes with the multiple choiches
                                        string cleanString = input.Replace(";#", "");

                                        if (cleanString == str)
                                        {
                                            string PageNameWithExt = rows.Name;

                                            childNode = new System.Web.UI.WebControls.TreeNode(PageNameWithExt);

                                            treeNode.ChildNodes.Add(childNode);
                                        }
                                    }
                                    treeView.Nodes.Add(treeNode);
                                }
                            }
                        }
                        this.Controls.Add(treeView);
                        base.CreateChildControls();
                    }

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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接