【转载】TreeView序列化,TreeView串行化,TreeView反序列化 c# winform

 

转载自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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值