当前位置: 首页 > 编程日记 > 正文

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

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

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

1、实现效果如下:

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

2、测试列表:

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

[html] view plaincopyprint?
  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. namespace TestTreeView.TestTreeView
  14. {
  15. [ToolboxData("<{0}:WPToolPaneTest runat=server></{0}:TestTreeView>"), XmlRoot(Namespace = "TestTreeView")]定义Toolbox data
  16. public class TestTreeView :System.Web.UI.WebControls.WebParts.WebPart
  17. {
  18. TreeView tvList = new TreeView();
  19. protected override void CreateChildControls()
  20. {
  21. tvList.NodeStyle.NodeSpacing = 5;//设置相邻节点的垂直间距
  22. tvList.ShowExpandCollapse = false;//不显示展开节点指示符,注:详细查看问题部分
  23. ListBind(0, 0);
  24. this.Controls.Add(tvList);
  25. }
  26. protected override void RenderContents(HtmlTextWriter writer)
  27. {
  28. 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'>");
  29. this.tvList.RenderControl(writer);
  30. writer.Write("</div></td></tr></table></div>");
  31. }
  32. /// <summary>
  33. /// 绑定TreeViewList列表数据
  34. /// </summary>
  35. /// <param name="ParentID">上一级导航ID</param>
  36. /// <param name="Level">所在树形的级别</param>
  37. private void ListBind(int ParentID, int Level)
  38. {
  39. SPSite site = SPContext.Current.Site;
  40. SPWeb web = SPContext.Current.Web;
  41. SPList list = web.Lists["TreeViewList"];
  42. var query = from SPListItem item in list.Items where item["ParentID"].ToString() == ParentID.ToString() && item["Level"].ToString() == Level.ToString() select item;
  43. foreach (SPListItem item in query)
  44. {
  45. TreeNode parentnode = new TreeNode();
  46. parentnode.Text = item["标题"].ToString();
  47. parentnode.Value = item["ID"].ToString();
  48. parentnode.ImageUrl = "/_layouts/images/folder.gif";
  49. SPFieldUrlValue url=new SPFieldUrlValue(item["Url"].ToString());
  50. parentnode.NavigateUrl = url.Url;
  51. NodesBind(parentnode,Int32.Parse(item["ID"].ToString()),Int32.Parse(item["Level"].ToString())+1);
  52. tvList.Nodes.Add(parentnode);
  53. }
  54. }
  55. /// <summary>
  56. /// 递归绑定子节点内容
  57. /// </summary>
  58. /// <param name="CurrentNode">当前节点</param>
  59. /// <param name="ParentID">上一级导航ID</param>
  60. /// <param name="Level">所在树形的级别</param>
  61. private void NodesBind(TreeNode CurrentNode, int ParentID, int Level)
  62. {
  63. SPSite site = SPContext.Current.Site;
  64. SPWeb web = SPContext.Current.Web;
  65. SPList list = web.Lists["TreeViewList"];
  66. var query = from SPListItem item in list.Items where item["ParentID"].ToString() == ParentID.ToString() && item["Level"].ToString() == Level.ToString() select item;
  67. foreach (SPListItem item in query)
  68. {
  69. TreeNode childnode = new TreeNode();
  70. childnode.Text = item["标题"].ToString();
  71. childnode.Value = item["ID"].ToString();
  72. SPFieldUrlValue url = new SPFieldUrlValue(item["Url"].ToString());
  73. childnode.NavigateUrl = url.Url;
  74. childnode.ImageUrl = "/_layouts/images/folder.gif";
  75. NodesBind(childnode, Int32.Parse(item["ID"].ToString()), Int32.Parse(item["Level"].ToString()) + 1);//递归读取列表,绑定到子节点
  76. CurrentNode.ChildNodes.Add(childnode);
  77. }
  78. }
  79. }
  80. }
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控件的显示效果,如有更好的方法,请不吝赐教!!

转载于:https://www.cnblogs.com/jackljf/p/3589213.html

相关文章:

智能医疗?轻松实现!

每个中国人都及其关注养老和住房问题&#xff0c;在中国每个人都十分有存钱的意识。就目前来看&#xff0c;现在的医疗和住房保障还没有能够满足我们现在的需求&#xff0c;因而&#xff0c;存钱显得尤为重要。我们关注医疗&#xff0c;是因为每个人都会面临年老&#xff0c;每…

TokuDB vs Innodb 基准测试对比

随着业务的发展以及mysql存储数据量的越来越大&#xff0c;很多超大表不仅仅存储变的不易&#xff0c;维护也变得越来越困难&#xff0c;特别是频繁的ddl操作让运维变得痛苦不堪。当然表拆分可以解决类似的问题&#xff0c;但是对一个稳定的系统来说&#xff0c;表拆分对业务的…

C++ 多线程:互斥对象 lock_gurad

描述 头文件:<mutex>声明方式: template< class Mutex > class lock_guard;简介 lock_guard是一种互斥包装器&#xff0c;它提供了非常便捷的raii资源管控技术用来在对象生存周期内提供互斥锁。 lock_gurad很好得解决了互斥变量mutex的锁成员在函数异常期间无法正…

太TM难看了,我自己都看不下去了

继续研究文件IO。 作用是用System.in输入一个文件路径&#xff0c;然后打印文件里的所有行。 而且虽然没仔细检查过&#xff0c;哦不就是因为没检查过&#xff0c;所以肯定不够健壮。 1 import java.io.*;2 import java.util.Scanner;3 4 public class test {5 public stat…

儿童吹泡泡水简单配方_自制泡泡水最简单配方的做法教程

泡泡吸引着各个年龄段的人&#xff0c;就像是反射彩虹的表面&#xff0c;在微风中漂浮。无论您是出于什么原因&#xff0c;都很容易在其中找到快乐。吹泡泡可以让小孩玩上几个小时&#xff0c;而大一点的孩子可以尝试制作最佳泡泡液。对于年轻的萌芽科学家来说&#xff0c;制备…

Linux系统下统计目录及其子目录文件个数

改变脚本权限&#xff1a;(这里假设你的脚本叫FileCount.sh) chmod ax FileCount.sh 脚本&#xff1a; 1 #!/bin/sh 2 echo 查看某目录下文件的个数 3 ls -l |grep "^-"|wc -l 4 5 echo 查看某目录下文件的个数&#xff0c;包括子目录里的。 6 ls -lR|grep "^-…

【Rsync项目实战一】备份全网服务器数据

目录 【Rsync项目实战】备份全网服务器数据 【企业案例】1.1 环境部署1.2 开始部署backup服务器&#xff1a;Rsync服务端过程&#xff1a;1.3 开始部署nfs01服务器&#xff1a;Rsync客户端过程&#xff1a;【Rsync项目实战】备份全网服务器数据 标签&#xff08;空格分隔&#…

C++ 多线程:条件变量 std::condition_variable

文章目录描述使用描述 头文件<condition_variable> 定义 class condition_variable; 简介 之前我们也已经介绍过了C多线程中互斥变量存在&#xff0c;已经足够支持多线程中对共享普通系统数据的合理访问。但是因为多线程中同一时刻必然会有一个线程持有锁&#xff0c;一…

小晶粒zsm分子筛合成表征实验报告_Nat. Mater.:区域选择性合成亚纳米金属-分子筛材料...

本文来自微信公众号&#xff1a;X-MOLNews亚纳米尺度的负载型催化剂是近些年多相催化领域以及相关材料科学领域的热门方向。围绕着单原子催化剂、团簇催化剂的论文如井喷一般出现在各大期刊上。关于亚纳米尺度金属催化剂的制备方法、表征方法、催化性能或是相关的理论研究都在如…

【翻译】使用新的Sencha Cmd 4命令app watch

原文&#xff1a;http://www.sencha.com/blog/using-the-new-app-watch-command-in-sencha-cmd-4/作者&#xff1a;Don Griffin Don Griffin is a member of the Ext JS core team. He was an Ext JS user for 2 years before joining Sencha and has over 20 years of softwar…

《设计模式解析(第2版)》

2019独角兽企业重金招聘Python工程师标准>>> 1. 软件开过程中的视角 视角 描述 概念 “软件要负责什么&#xff1f;” 规约 “怎么使用软件&#xff1f;” 实现 ”软件怎样履行自己的责任&#xff1f;“ 可能使用的另外一组视角&#xff1a;使用视角和创建/…

Nmap帮助文档解释

目标指定&#xff08;target specifiction&#xff09; 1、用法:Nmap[扫描类型][设置]{设备列表} 注&#xff1a;[]{} -> 中的内容必须有 <> -> 中的内容可以有可以没有 2、地址类型&#xff1a;主机名、ip地址、网段 3、-iL<文件名> 通过文件输入地址 4、-i…

C++ 多线程:future 异步访问类(线程之间安全便捷的数据共享)

文章目录future前言future描述future类成员使用总结future前言 首先查看如下代码 #include <iostream> #include <thread> #include <future> #include <mutex>using namespace std;void fun1(int n,int &x) {int res 1;for (int i n; i>1;…

bldc不同载波频率_广播百科 频率调制

∧ 请关注为星标&#xff0c;在知识的海洋每天进步1%第 463期频率调制&#xff0c;简称“调频”&#xff0c;它是一种使载波的瞬时频率随调制信号的变化规律而变化的调制方法。实现这种调制方法的电路称调频器,广泛用于调频广播、电视伴音、微波通信、锁相电路和扫频仪等方面。…

基于visual Studio2013解决面试题之0403串联字符串

&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/*有 n个长为 m1的字符串&#xff0c;如果某个字符串的最后m个字符与某个字符串的前m个字符匹配&#xff0c;则两个字符串可以联接&#xff0c;问这n个字符串最多可以连成一个多长的字符串&#xff0c;如果出现循环&…

MIT开放式课程“自然语言处理”介绍

MIT开放式课程“自然语言处理”介绍 发表于 2009年01月2号 由 52nlp从订阅的Google快讯上知道这个“麻省理工学院“开放式课程网页” | 电机工程与计算机科学 | 6.881 2004秋季课程&#xff1a;自然语言处理 | 课堂讲稿”网站&#xff0c;看介绍是MIT开放课程的中文翻译计划&am…

怎么将对象里面部分的属性放到一个空的对象里面去

var obj{name:jack,age:18,sex:male}var {name,age}objvar obj2{name,age}console.log(obj2) //{name: "jack", age: 18} 这是es6的用法 还有其他的3种方法,关于对象复制的 es6 var obj {name: jack,age: 18}var data Object.assign(obj)console.log(data) //{nam…

C++多线程:thread类创建线程的多种方式

文章目录描述函数成员简介总结描述 头文件 <thread> 声明方式&#xff1a;std::thread <obj> 简介 线程在构造关联的线程对象时立即开始执行&#xff0c;从提供给作为构造函数参数的顶层函数开始。如果顶层函数抛出异常&#xff0c;则调用 std::terminate。正如我…

C C++的编译过程详解

C/C编译过程C/C编译过程主要分为4个过程1) 编译预处理2) 编译、优化阶段3) 汇编过程4) 链接程序一、编译预处理&#xff08;1&#xff09;宏定义指令&#xff0c;如#define Name TokenString&#xff0c;#undef等。 对于前一个伪指令&#xff0c;预编译所要做的是将程序中的所有…

python queue 调试_学Python不是盲目的,是有做过功课认真去了解的

有多少伙伴是因为一句‘人生苦短&#xff0c;我用Python’萌生想法学Python的&#xff01;我跟大家更新过很多Python学习教程普及过多次的Python相关知识&#xff0c;不过大家还是还得计划一下Python学习路线&#xff01;Python入门前&#xff0c;你必须得知道这些&#xff0c;…

嘿嘿 刚刚进来 记录下

大家好&#xff0c;小弟刚刚进来&#xff0c;记录一下&#xff0c;发现这个网站真是太好了&#xff01;&#xff01;转载于:https://blog.51cto.com/wikowin/1112039

Oracle数据库查看表空间是否为自增的

表空间是有数据文件组成的&#xff0c;所以看表空间是否自增即看数据文件&#xff0c;如下查自增的表空间&#xff1a; select tablespace_name,file_name,autoextensible from dba_data_files where autoextensibleYES; autoextensible: YES/NO 即表示是否自增。 转载于:https…

C++多线程:异步操作std::async和std::promise

文章目录std::async简介使用案例std::promise简介成员函数总结之前的文章中提到了C多线程中的异步操作机制 C 多线程&#xff1a;future 异步访问类&#xff08;线程之间安全便捷的数据共享)&#xff0c;接下来分享关于异步操作中 async和 promise的相关使用总结。std::async …

5如何将表格的一行数据清空_微信公众号推文中如何自定义添加表格?

微信公众号发的图文消息里经常需要有表格&#xff0c;因为表格进行数据展现更直观明了&#xff0c;所以接下来就给大家分享一下如何自定义添加表格。打开小蚂蚁编辑器&#xff0c;在编辑区点击鼠标右键&#xff0c;在出现的选项中选择【插入表格】。系统会默认添加一个5行5列的…

基于visual Studio2013解决面试题之0901奇偶站队

&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/*给定一个存放整数的数组&#xff0c;重新排列数组使得数组左边为奇数&#xff0c;右边为偶数 解决方法&#xff1a;两边同时遍历&#xff0c;如果遇到左边偶数或者右边基数&#xff0c;则交换 */#include <iostrea…

联想架构调整:智能手机业务很重要

1月5日&#xff0c;杨元庆宣布联想集团进行组织架构调整。将联想旗下业务拆分为两个新的端到端业务集团—— Lenovo 业务集团和 Think 业务集团。杨元庆在内部邮件如是说:“Lenovo业务集团(Lenovo Business Group&#xff0c;简称LBG)&#xff0c;由刘军领军&#xff0c;致力于…

activiti5/6 系列之--BpmnModel使用

BpmnModel对象&#xff0c;是activiti动态部署中很重要的一个对象&#xff0c;如果BpmnModel对象不能深入的理解&#xff0c;那可能如果自己需要开发一套流程设计器&#xff0c;使用bpmn-js使用前端或者C/S展现流程流转而不是使用工作流引擎&#xff0c;就显得力不从心。例如&a…

C++多线程:package_task异步调用任何目标执行操作

文章目录描述函数成员及使用总结我们上一篇描述关于C多线程中的异步操作相关库( async和 promise)&#xff0c;本节将分享c标准库中最后一个多线程异步操作库 package_task的学习笔记。描述 头文件 <future> 声明方式: template< class R, class ...Args > class …

ICE BOX 配置,使用----第一篇

一 理论部分 (1) 为什么要使用icebox? icebox server代替了通常的server. icebox是为了方便集中管理多个ice服务而建立的。 它通过使用icebox服务器&#xff0c;把ice服务注册进去&#xff0c;从而建立联系。 所以它除了建立传统的ice服务器&#xff0c;ice客户端&#xff0c;…

测试打桩_DNF:CEO实测旭旭宝宝红眼,打桩高达2494E,伤害超越狂人剑魂

对于红眼这个职业&#xff0c;旭旭宝宝倾注了太多的心血&#xff0c;耗资几千万打造而成。虽然&#xff0c;作为固伤职业&#xff0c;在伤害方面&#xff0c;不及剑魂和剑帝这类百分比&#xff0c;但因人数颇多&#xff0c;从而被广泛关注。而今&#xff0c;旭旭宝宝的红眼&…