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

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

转载自:http://www.cnblogs.com/Ivan-Yan/archive/2009/03/14/1410232.html

     最近一个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

 

posted @ 2009-12-04 10:56  D.Resource  阅读(473)  评论(1编辑  收藏  举报