转载自http://www.yongfa365.com/Item/WinForm-TreeView-SerializeTree.html

2009年给公司做了个管理系统,里面用到了TreeView,数据有1500多条,加载要10秒钟左右

柳永法(yongfa365)'Blog的特点是:有问题,就要解决,尤其是像这种几十人、上百人使用的系统。

后来使用登录时加载数据,登录后再使用就Clone()的解决方案,感觉不错。

不过,每次调试程序时得等半天,实在不爽。

前些天看到“序列化”这个概念,大意就是把对象保存为一个文件,下次再使用时,反序列化一下就OK了,第二天一大早到公司立马做了个Demo,哇,不错,非常之不错,使用此方法后,根本没有延迟的现象。今天终于应用到这个项目中了,同志们再也不用等那10秒了。

特记录于此,供后人瞻仰

 1: using System;
 2: using System.IO;
 3: using System.Windows.Forms;
 4: using System.Runtime.Serialization.Formatters.Binary;
 5: using System.Data;
 6:
 7: //from:http://www.ecjtu.org/forum/read.php?tid-12933.html
 8: //反序列化:SerializeTree.TreeViewDataAccess.LoadTreeViewData(treeView1,"C:\\treeview.txt");
 9: //序列化: SerializeTree.TreeViewDataAccess.SaveTreeViewData(treeView1,"C:\\treeview.txt");
 10:
 11:
 12: namespace SerializeTree
 13: {
 14: /// <summary>
 15: /// TreeView串行化类
 16: /// </summary>
 17: public class TreeViewDataAccess
 18: {
 19: public TreeViewDataAccess() { }
 20:
 21: /// <summary>
 22: /// TreeViewData
 23: /// </summary>
 24: [Serializable()]
 25: public struct TreeViewData
 26: {
 27: public TreeNodeData[] Nodes;
 28:
 29: /// <summary>
 30: /// 递归初始化TreeView数据
 31: /// </summary>
 32: /// <param name="treeview"></param>
 33: public TreeViewData(TreeView treeview)
 34: {
 35: Nodes = new TreeNodeData[treeview.Nodes.Count];
 36: if (treeview.Nodes.Count == 0)
 37: {
 38: return;
 39: }
 40: for (int i = 0; i <= treeview.Nodes.Count - 1; i++)
 41: {
 42: Nodes[i] = new TreeNodeData(treeview.Nodes[i]);
 43: }
 44: }
 45:
 46: /// <summary>
 47: /// 通过TreeViewData弹出TreeView
 48: /// </summary>
 49: /// <param name="treeview"></param>
 50: public void PopulateTree(TreeView treeview)
 51: {
 52: if (this.Nodes == null || this.Nodes.Length == 0)
 53: {
 54: return;
 55: }
 56: treeview.BeginUpdate();
 57: for (int i = 0; i <= this.Nodes.Length - 1; i++)
 58: {
 59: treeview.Nodes.Add(this.Nodes[i].ToTreeNode());
 60: }
 61: treeview.EndUpdate();
 62: }
 63: }
 64:
 65: /// <summary>
 66: /// TreeNodeData
 67: /// </summary>
 68: [Serializable()]
 69: public struct TreeNodeData
 70: {
 71: public string Text;
 72: public int ImageIndex;
 73: public int SelectedImageIndex;
 74: public bool Checked;
 75: public bool Expanded;
 76: public object Tag;
 77: public TreeNodeData[] Nodes;
 78:
 79: /// <summary>
 80: /// TreeNode构造函数
 81: /// </summary>
 82: /// <param name="node"></param>
 83: public TreeNodeData(TreeNode node)
 84: {
 85: this.Text = node.Text;
 86: this.ImageIndex = node.ImageIndex;
 87: this.SelectedImageIndex = node.SelectedImageIndex;
 88: this.Checked = node.Checked;
 89: this.Expanded = node.IsExpanded;
 90: this.Nodes = new TreeNodeData[node.Nodes.Count];
 91:
 92: if ((!(node.Tag == null)) && node.Tag.GetType().IsSerializable)
 93: {
 94: this.Tag = node.Tag;
 95: }
 96: else
 97: {
 98: this.Tag = null;
 99: }
 100: if (node.Nodes.Count == 0)
 101: {
 102: return;
 103: }
 104: for (int i = 0; i <= node.Nodes.Count - 1; i++)
 105: {
 106: Nodes[i] = new TreeNodeData(node.Nodes[i]);
 107: }
 108: }
 109:
 110: /// <summary>
 111: /// TreeNodeData返回TreeNode
 112: /// </summary>
 113: /// <returns></returns>
 114: public TreeNode ToTreeNode()
 115: {
 116: TreeNode ToTreeNode = new TreeNode(this.Text, this.ImageIndex, this.SelectedImageIndex);
 117: ToTreeNode.Checked = this.Checked;
 118: ToTreeNode.Tag = this.Tag;
 119: if (this.Expanded)
 120: {
 121: ToTreeNode.Expand();
 122: }
 123: if (this.Nodes == null && this.Nodes.Length == 0)
 124: {
 125: return null;
 126: }
 127: if (ToTreeNode != null && this.Nodes.Length == 0)

posted @ 2010-12-17 21:21 羽落无声 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ZJoy/archive/2010/12/17/1909577.html

【转载】TreeView序列化,TreeView串行化,TreeView反序列化 c# winform相关推荐

  1. 序列化(串行化)- 使用BinaryFormatter进行序列化

    注:原书上翻译为串行化,MSDN翻译为序列化,我以MSDN为准,写为序列化. 可以使用属性(Attribute)将类的元素标为可序列化的(Serializable)和不可被序列化的(NonSerial ...

  2. php 串行化数据,PHP中的串行化变量和序列化对象

    串行化大概就是把一些变量转化成为字符串的字节流的形式,这样比较容易传输.存储.当然,关是传输存储没有什么,关键是变成串的形式以后还能够转化回来,而且能够保持原来数据的结构. 在PHP中有多串行化处理的 ...

  3. java ado recordset_AdoDataSet.RecordSet的串行化和还原(转载)

    标签: //数据集串行化 function RecordsetToXML(const Recordset: _Recordset): string; var RS: Variant; Stream: ...

  4. php 串行化数据,php中对象的串行化

    我们大家有知道PHP串行化可以把变量包括对象,转化成连续bytes数据,你可以将串行化后的变量存在一个文件里或在网络上传输,然后再反串行化还原为原来的数据.文章这里就PHP串行化为大家详细的介绍.你在 ...

  5. Visual C++ 时尚编程百例019(串行化)

    串行化 串行化的基本思想是一个类对象,能够将它记录在成员变量中的当前状态存储, 也可以通过串行化的读取恢复操作重新创建对象. 使一个类可串行化,在类声明中使用DECLARE_DYNCREATE(CMy ...

  6. 在asp.net2.0中使用串行化对象实现自定义配置

    在一次升级一个entlib1.0到entlib的高版本程序时,碰到entlib的一个通过XmlSerializer方式实现的自定义配置.而在entlib的高版本中这样的配置不再被支持.可是又不希望修改 ...

  7. 利用XMLSerializer将对象串行化到XML

    微软已经意识到串行化数据的重要性,因此在.NET框架中包含了命名空间System.Runtime.Serialization和System.Xml.Serialization以提供串行化功能,为用户自 ...

  8. php串行化场景,PHP中串行化的使用

    PHP中串行化的使用 发布时间:2017-04-26 09:00:40 作者:佚名 阅读:(179) 串行化用于对对象的存储或者传输,通过反串行化得到这个对象 class Person{        ...

  9. MFC 文件I/O和串行化

    1.枚举所有文件夹(递归) void EnumerateFolders () {WIN32_FIND_DATA fd;HANDLE hFind = ::FindFirstFile (_T (" ...

最新文章

  1. 21世纪20年代改变世界的十大趋势
  2. 抛开 Spring 去理解 IOC 思想:原来 IOC 容器这么简单
  3. Echarts学习记录——如何去掉网格线及网格区域颜色
  4. py文件转exe时包含paramiko模块出错解决方法
  5. 隔离是否有效?北大面向新冠疫情的数据可视化分析与模拟预测
  6. 一寸相思千万绪,人间没个安排处。
  7. 网站项目常用JS,CSS等控件插件
  8. 【语音识别】基于matlab GUI声纹识别【含Matlab源码 1022期】
  9. 最速下降法及案例分析(含MATLAB代码)
  10. uniapp分销商城源码开发
  11. JavaScript 技术篇-如何实现在线logo网站制作后的logo去水印,免费制作无水印logo方法
  12. 123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
  13. python中append函数的用法
  14. 向往的生活之鸿蒙传承,《向往的生活5》播放量破6.43亿,张艺兴功劳大,《跑男》比不了...
  15. ARPG游戏中怪物AI实现
  16. Android studio3.6.3的jdk版本设置在哪里?
  17. 纯原生javascript下拉框表单美化实例教程
  18. linux下查看系统内存使用情况的几个命令
  19. 使用fastjson字符串对象互转
  20. 通用寄存器介绍和段寄存器的介绍

热门文章

  1. 各种数字显示屏接口:LVDS, DVI, HDMI, DisplayPort, DSI
  2. java程序给输出汉字_java面试题目编写一个java程序,实现拼音转成对应汉字功能。...
  3. JavaScript——(function(){})()立即执行函数解析
  4. Arcgis javascript那些事儿(二十)——dojo中djconfig配置、dojo与requirejs项目冲突
  5. 好用的前端组件收集(ing)
  6. linux普通用户id一般是,实际用户ID和有效用户ID (一) *****
  7. python封装数据库操作_Python3 数据库操作小封装
  8. 报表 labview_干货!24个LabVIEW初学者常见问题及解答汇总
  9. 剑指offer面试题10- I. 斐波那契数列
  10. Python基础——for循环语句