SharePoint2010沙盒解決方案基礎開發——關於TreeView樹形控件讀取列表數據(樹形導航)的webpart開發及問題


SharePoint2010沙盒解決方案基礎開發——關於TreeView樹形控件讀取列表數據(樹形導航)的webpart開發及問題

1、實現效果如下:

點擊各個節點進入相應的鏈接

2、測試列表:

3、創建解決方案及webpart,代碼如下所示

using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
//添加引用
using System.Xml.Serialization;
using System.Linq;
using System.Data;

namespace TestTreeView.TestTreeView
{
    [ToolboxData("<{0}:WPToolPaneTest runat=server></{0}:TestTreeView>"), XmlRoot(Namespace = "TestTreeView")]////定義Toolbox data  
    public class TestTreeView :System.Web.UI.WebControls.WebParts.WebPart
    {
        TreeView tvList = new TreeView();

        protected override void CreateChildControls()
        {
            tvList.NodeStyle.NodeSpacing = 5;//設置相鄰節點的垂直間距
            tvList.ShowExpandCollapse = false;//不顯示展開節點指示符,注:詳細查看問題部分
            ListBind(0, 0);
            this.Controls.Add(tvList);
        }

        protected override void RenderContents(HtmlTextWriter writer)
        {
            writer.Write("<div style=' border:2px solid #CCCCCC; width:600px'><table cellpadding='0' cellspacing='0' width='100%'><tr><td style=' width:20%; vertical-align:top'><div style=' margin-top:10px;margin-left:5px'>");
            this.tvList.RenderControl(writer);
            writer.Write("</div></td></tr></table></div>");
        }

        /// <summary>
        /// 綁定TreeViewList列表數據
        /// </summary>
        /// <param name="ParentID">上一級導航ID</param>
        /// <param name="Level">所在樹形的級別</param>
        private void ListBind(int ParentID, int Level)
        {
            SPSite site = SPContext.Current.Site;
            SPWeb web = SPContext.Current.Web;
            SPList list = web.Lists["TreeViewList"];
            var query = from SPListItem item in list.Items where item["ParentID"].ToString() == ParentID.ToString() && item["Level"].ToString() == Level.ToString() select item;
            foreach (SPListItem item in query)
            {
                TreeNode parentnode = new TreeNode();
                parentnode.Text = item["標題"].ToString();
                parentnode.Value = item["ID"].ToString();
                parentnode.ImageUrl = "/_layouts/images/folder.gif";
                SPFieldUrlValue url=new SPFieldUrlValue(item["Url"].ToString());
                parentnode.NavigateUrl = url.Url;
                NodesBind(parentnode,Int32.Parse(item["ID"].ToString()),Int32.Parse(item["Level"].ToString())+1);
                tvList.Nodes.Add(parentnode);
            }
        }

        /// <summary>
        /// 遞歸綁定子節點內容
        /// </summary>
        /// <param name="CurrentNode">當前節點</param>
        /// <param name="ParentID">上一級導航ID</param>
        /// <param name="Level">所在樹形的級別</param>
        private void NodesBind(TreeNode CurrentNode, int ParentID, int Level)
        {
            SPSite site = SPContext.Current.Site;
            SPWeb web = SPContext.Current.Web;
            SPList list = web.Lists["TreeViewList"];
            var query = from SPListItem item in list.Items where item["ParentID"].ToString() == ParentID.ToString() && item["Level"].ToString() == Level.ToString() select item;
            foreach (SPListItem item in query)
            {
                TreeNode childnode = new TreeNode();
                childnode.Text = item["標題"].ToString();
                childnode.Value = item["ID"].ToString();
                SPFieldUrlValue url = new SPFieldUrlValue(item["Url"].ToString());
                childnode.NavigateUrl = url.Url;
                childnode.ImageUrl = "/_layouts/images/folder.gif";
                NodesBind(childnode, Int32.Parse(item["ID"].ToString()), Int32.Parse(item["Level"].ToString()) + 1);//遞歸讀取列表,綁定到子節點
                CurrentNode.ChildNodes.Add(childnode);
                
            }
        }

    }
}


4、問題部分

當TreeView控件tvList的ShowExpandCollapse屬性(是否顯示展開節點指示符)設爲true時,會出現如下錯誤

查了一些資料,筆者未能解決此問題,只能犧牲一些TreeView控件的顯示效果,如有更好的方法,請不吝賜教!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章