zoukankan      html  css  js  c++  java
  • Tree控件序列化

    TreeView本身不支持直接使用XmlSerializer序列化,所以要利用其它途径来进行保存,以下代码就是其中一种保存成文件的方式,仅供参考。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Windows.Controls;

    namespace Flexware.Controls
    {
        /// <summary>
        /// TreeView操作类
        /// </summary>
        public class TreeViewDataAccess
        {
            public TreeViewDataAccess() { }

            /// <summary>
            /// TreeViewData
            /// </summary>
            [Serializable()]
            public struct TreeViewData
            {
                public TreeNodeData[] Nodes;

                /// <summary>
                /// 递归初始化TreeViewItem数据
                /// </summary>
                /// <param name="treeview"></param>
                public TreeViewData(TreeViewItem treeview)
                {
                    Nodes = new TreeNodeData[treeview.Items.Count];
                    if (treeview.Items.Count == 0)
                    {
                        return;
                    }
                    for (int i = 0; i <= treeview.Items.Count - 1; i++)
                    {
                        Nodes[i] = new TreeNodeData(treeview.Items[i] as TreeViewItem);
                    }
                }

                /// <summary>
                /// 通过TreeViewData弹出TreeView
                /// </summary>
                /// <param name="treeview"></param>
                public void PopulateTree(TreeViewItem treeview)
                {
                    if (this.Nodes == null || this.Nodes.Length == 0)
                    {
                        return;
                    }
                    //treeview.BeginUpdate();
                    for (int i = 0; i <= this.Nodes.Length - 1; i++)
                    {
                        treeview.Items.Add(this.Nodes[i].ToTreeNode());
                    }
                    //treeview.EndUpdate();
                }
            }

            /// <summary>
            /// TreeNodeData
            /// </summary>
            [Serializable()]
            public struct TreeNodeData
            {
                public string Text;
                public string Name;
                public object Tag;
                public TreeNodeData[] Nodes;

                /// <summary>
                /// TreeNode构造函数
                /// </summary>
                /// <param name="node"></param>
                public TreeNodeData(TreeViewItem node)
                {
                    this.Text = node.Header.ToString();
                    this.Name = node.Name;
                    this.Nodes = new TreeNodeData[node.Items.Count];

                    if ((!(node.Tag == null)) && node.Tag.GetType().IsSerializable)
                    {
                        this.Tag = node.Tag;
                    }
                    else
                    {
                        this.Tag = null;
                    }
                    if (node.Items.Count == 0)
                    {
                        return;
                    }
                    for (int i = 0; i <= node.Items.Count - 1; i++)
                    {
                        Nodes[i] = new TreeNodeData(node.Items[i] as TreeViewItem);
                    }
                }

                /// <summary>
                /// TreeNodeData返回TreeNode
                /// </summary>
                /// <returns></returns>
                public TreeViewItem ToTreeNode()
                {
                    TreeViewItem ToTreeNode = new TreeViewItem();
                    ToTreeNode.Header = this.Text;
                    ToTreeNode.Tag = this.Tag;
                    ToTreeNode.Name = this.Name;
                   
                    if (this.Nodes == null && this.Nodes.Length == 0)
                    {
                        return null;
                    }
                    if (ToTreeNode != null && this.Nodes.Length == 0)
                    {
                        return ToTreeNode;
                    }
                    for (int i = 0; i <= this.Nodes.Length - 1; i++)
                    {
                        ToTreeNode.Items.Add(this.Nodes[i].ToTreeNode());
                    }
                    return ToTreeNode;
                }
            }
            /// <summary>
            /// 加载TreeViewItem
            /// </summary>
            /// <param name="treeView"></param>
            /// <param name="path"></param>
            public static void LoadTreeViewData(TreeViewItem treeView, string path)
            {
                BinaryFormatter ser = new BinaryFormatter();
                Stream file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
                TreeViewData treeData = ((TreeViewData)(ser.Deserialize(file)));
                treeData.PopulateTree(treeView);
                file.Close();

            }

            /// <summary>
            /// 保存TreeViewItem 到文件
            /// </summary>
            /// <param name="treeView"></param>
            /// <param name="path"></param>
            public static void SaveTreeViewData(TreeViewItem treeView, string path)
            {
                BinaryFormatter ser = new BinaryFormatter();
                Stream file = new FileStream(path, FileMode.Create);
                ser.Serialize(file, new TreeViewData(treeView));
                file.Close();

            }
        }
    }

  • 相关阅读:
    NYOJ228 士兵杀敌(五)
    NYOJ236 彩色棒 字典树 + 并查集 + 欧拉路
    给大家推荐一个用电脑拨打普通电话的软件skype
    转:甲骨文将以74亿美元收购太阳微系统公司
    花生壳原理求解
    利用IHttpModule及Session_End事件进行在线会员统计遇到的问题
    我的开发环境介绍及一个 Expression Bland 画图形的例子
    WF (Windows Workflow Foundation) 工作流学习(二)一个Asp.Net 与 顺序工作流 结合的例子
    WPF 、WinFrom 调用顺序工作流的登陆窗口例子
    Expression Bland 入门视频(三) 菜单、项目面板及工作区介绍
  • 原文地址:https://www.cnblogs.com/xiarifeixue/p/2020835.html
Copyright © 2011-2022 走看看