zoukankan      html  css  js  c++  java
  • SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题

    转:http://blog.csdn.net/miragesky2049/article/details/7204882

    SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题

    1、实现效果如下:

    点击各个节点进入相应的链接

    2、测试列表:

    3、创建解决方案及webpart,代码如下所示

    1. using System;  
    2. using System.ComponentModel;  
    3. using System.Web;  
    4. using System.Web.UI;  
    5. using System.Web.UI.WebControls;  
    6. using System.Web.UI.WebControls.WebParts;  
    7. using Microsoft.SharePoint;  
    8. using Microsoft.SharePoint.WebControls;  
    9. //添加引用  
    10. using System.Xml.Serialization;  
    11. using System.Linq;  
    12. using System.Data;  
    13.   
    14. namespace TestTreeView.TestTreeView  
    15. {  
    16.     [ToolboxData("<{0}:WPToolPaneTest runat=server></{0}:TestTreeView>"), XmlRoot(Namespace = "TestTreeView")]////定义Toolbox data    
    17.     public class TestTreeView :System.Web.UI.WebControls.WebParts.WebPart  
    18.     {  
    19.         TreeView tvList = new TreeView();  
    20.   
    21.         protected override void CreateChildControls()  
    22.         {  
    23.             tvList.NodeStyle.NodeSpacing = 5;//设置相邻节点的垂直间距  
    24.             tvList.ShowExpandCollapse = false;//不显示展开节点指示符,注:详细查看问题部分  
    25.             ListBind(0, 0);  
    26.             this.Controls.Add(tvList);  
    27.         }  
    28.   
    29.         protected override void RenderContents(HtmlTextWriter writer)  
    30.         {  
    31.             writer.Write("<div style=' border:2px solid #CCCCCC; 600px'><table cellpadding='0' cellspacing='0' width='100%'><tr><td style=' 20%; vertical-align:top'><div style=' margin-top:10px;margin-left:5px'>");  
    32.             this.tvList.RenderControl(writer);  
    33.             writer.Write("</div></td></tr></table></div>");  
    34.         }  
    35.   
    36.         /// <summary>  
    37.         /// 绑定TreeViewList列表数据  
    38.         /// </summary>  
    39.         /// <param name="ParentID">上一级导航ID</param>  
    40.         /// <param name="Level">所在树形的级别</param>  
    41.         private void ListBind(int ParentID, int Level)  
    42.         {  
    43.             SPSite site = SPContext.Current.Site;  
    44.             SPWeb web = SPContext.Current.Web;  
    45.             SPList list = web.Lists["TreeViewList"];  
    46.             var query = from SPListItem item in list.Items where item["ParentID"].ToString() == ParentID.ToString() && item["Level"].ToString() == Level.ToString() select item;  
    47.             foreach (SPListItem item in query)  
    48.             {  
    49.                 TreeNode parentnode = new TreeNode();  
    50.                 parentnode.Text = item["标题"].ToString();  
    51.                 parentnode.Value = item["ID"].ToString();  
    52.                 parentnode.ImageUrl = "/_layouts/images/folder.gif";  
    53.                 SPFieldUrlValue url=new SPFieldUrlValue(item["Url"].ToString());  
    54.                 parentnode.NavigateUrl = url.Url;  
    55.                 NodesBind(parentnode,Int32.Parse(item["ID"].ToString()),Int32.Parse(item["Level"].ToString())+1);  
    56.                 tvList.Nodes.Add(parentnode);  
    57.             }  
    58.         }  
    59.   
    60.         /// <summary>  
    61.         /// 递归绑定子节点内容  
    62.         /// </summary>  
    63.         /// <param name="CurrentNode">当前节点</param>  
    64.         /// <param name="ParentID">上一级导航ID</param>  
    65.         /// <param name="Level">所在树形的级别</param>  
    66.         private void NodesBind(TreeNode CurrentNode, int ParentID, int Level)  
    67.         {  
    68.             SPSite site = SPContext.Current.Site;  
    69.             SPWeb web = SPContext.Current.Web;  
    70.             SPList list = web.Lists["TreeViewList"];  
    71.             var query = from SPListItem item in list.Items where item["ParentID"].ToString() == ParentID.ToString() && item["Level"].ToString() == Level.ToString() select item;  
    72.             foreach (SPListItem item in query)  
    73.             {  
    74.                 TreeNode childnode = new TreeNode();  
    75.                 childnode.Text = item["标题"].ToString();  
    76.                 childnode.Value = item["ID"].ToString();  
    77.                 SPFieldUrlValue url = new SPFieldUrlValue(item["Url"].ToString());  
    78.                 childnode.NavigateUrl = url.Url;  
    79.                 childnode.ImageUrl = "/_layouts/images/folder.gif";  
    80.                 NodesBind(childnode, Int32.Parse(item["ID"].ToString()), Int32.Parse(item["Level"].ToString()) + 1);//递归读取列表,绑定到子节点  
    81.                 CurrentNode.ChildNodes.Add(childnode);  
    82.                   
    83.             }  
    84.         }  
    85.   
    86.     }  
    87. }  


    4、问题部分

    当TreeView控件tvList的ShowExpandCollapse属性(是否显示展开节点指示符)设为true时,会出现如下错误

    查了一些资料,笔者未能解决此问题,只能牺牲一些TreeView控件的显示效果,如有更好的方法,请不吝赐教!!

  • 相关阅读:
    POJ1028 Web Navigation【堆栈+模拟】
    UVa10276 HDU1329 ZOJ1239 Hanoi Tower Troubles Again!【递推函数+打表】
    UVALive5369 UVa732 HDU1515 ZOJ1004 Anagrams by Stack【DFS+堆栈】
    HDU5776 sum【前缀和+模除】
    POJ1844 Sum【水题+数学题】
    AOJ0558 Cheese【BFS】
    POJ3009 Curling 2.0【DFS】
    HDU1163 Eddy's digital Roots(解法二)【快速模幂+九余数定理】
    HDU1210 Eddy's 洗牌问题【递推函数+模拟】
    Vijos P1571 笨笨的导弹攻击【最长上升子序列+DP】
  • 原文地址:https://www.cnblogs.com/jackljf/p/3589213.html
Copyright © 2011-2022 走看看