5

我必须为 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

我到目前为止的代码

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

2 回答 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();
                    }
于 2012-08-07T15:44:32.740 回答
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();
}
于 2012-08-08T07:28:47.983 回答