• Silverlight Treeview 相关操作:加载,保存,索引节点,节点移动,模板节点


      最近一个Silverlight项目中,需要多处表达展示内容的“父子”关系。自然用“树”来表达自然是再好不过。Ms Toolkit中包含了TreeView控件,很好的满足了需求。
         要表述树状关系,数据库的设计一定要合理,不然这层关系在加载的时候就会很痛苦。另外,根据需求,树状节点的展示还要有一定的顺序,所以一棵树在保存的时候,每个节点在树中的位置也要有所记录。
         数据库设计

    Code

         这样,加载的时候就可以根据ID,ParentID找到父子关系,并根据IDX来加载ID在树中的索引。这个索引要从树的第一个节点开始深度遍历,根据遍历到的节点的顺序记录其索引。

    -树的加载

     string sqlTv = "SELECT * FROM PDM_BASIC_INFO ORDER BY IDX ASC";

    Code

     


         private void AddTreeNodeForProject(int parentID, TreeViewItem treeViewItem)
            {

                List
    <ProjectInfo> result = (from Info in listsForProject
                                            
    where Info.ParentID == parentID
                                            select Info).ToList
    <ProjectInfo>();

                
    if (result.Count > 0)
                {
                    
    foreach (ProjectInfo info in result)
                    {
                        TreeViewItem objTreeNode 
    = new TreeViewItem();
                        objTreeNode.IsExpanded 
    = true;
                       
                        
    //如果是叶子节点,为其加载模板控制项
                        if (info.Grade == 3//叶子节点绑定 时间控制项
                           {
                            Grid grid 
    = getGridTemplate();
                            setGridData(grid, info.Name, info.ID);
                            objTreeNode.Header 
    = grid;

                        }
                        
    else
                        {
                            objTreeNode.Header 
    = "[" + info.ID + "]" + info.Name;
                        }

                        
    //添加根节点
                        if (treeViewItem == null)
                        {
                            tvshow.Items.Add(objTreeNode);
                        }
                        
    else
                        {
                            treeViewItem.Items.Add(objTreeNode);
                        }
                        
    //递归加载
                        AddTreeNodeForProject(info.ID, objTreeNode);
                    }
                }
            }

     其中,节点的header属性为object类型,这样我们可以根据需求,为其赋予需要的控制项。

    设置定制节点

    Code

     Demo:

    读取节点信息

    Code

    --=============
         另外,用户提出一些特定的需求:树状节点的顺序他们要自己调整。Liquid.Treeview控件,可以很好的实现节点的拖拽和移动,我们只需要在用户移动后深度遍历每个节点,并保存其位置索引信息即可。
        Liquid.Treeview节点的移动:

    Code


    遍历保存节点索引

    Code
  • 相关阅读:
    SparseArray<E>详解
    Android项目实战(十二):解决OOM的一种偷懒又有效的办法
    浅谈GridLayout(网格布局)
    Android项目实战(十一):moveTaskToBack(boolean ) 方法的使用
    Android Studio 项目代码全部消失--出现原因及解决方法
    Installation failed with message INSTALL_FAILED_UID_CHANGED.--APK安装失败解决方法
    Android项目实战(三十):Fresco加载gif图片并播放
    Android项目实战(十):自定义倒计时的TextView
    坚持一段时间了,达不到原有的目的,就应该放弃了——考研每日总结
    191006
  • 原文地址:https://www.cnblogs.com/leischen/p/2537184.html
Copyright © 2020-2023  润新知