首先我左边的treeview结构是根据右侧表格中的层次关系(有一项代表节次)而动态生成的,现在我想实现通过点击不同的treeview节点,右侧动态定位到相应的表格行显示出来,怎么实现呢

解决方案 »

  1.   

    TreeView控件有个tag属性,在生成节点时,同时将要在表格中要显示的信息存到TreeView.tag属性中,在点击节点时激活TreeView.AfterSelect 事件 ,在事件中再将tag中的信息取出在表格行中显示.
      //加载树形节点
            private void LoadingTreeView()
            {
                tvAll.Nodes.Clear();//清空原有节点
                TableQuery query = new TableQuery();
                TreeData treeData = new TreeData();//自定义的树形节点处理类
                IList<DisplayTree> displayList = query.QueryTreeData();
    //获取根节点
                IEnumerable<DisplayTree> parents = treeData.SelectParentCollection(displayList);
                if (parents.GetEnumerator().MoveNext())
                {
                    foreach (dt DisplayTree in parents)
                    {
                        TreeNode node = new TreeNode();
                        node.Text = dt.Name;
    //将节点对应的对象信息存入tag属性中
                        node.Tag = dt;
                        IEnumerable<DisplayTree> children = treeData.selectChildCollection(dt.Id, displayList);
                        if (children.GetEnumerator().MoveNext())
                        {
    //获取根节点对应的所有子节点树形结构
                            treeData.GetDisplayTree(ref node, children, displayList);
                        }                    
                        tvAll.Nodes.Add(node);                    
                    }
                }
                tvAll.SelectedNode = null;
                tvAll.ExpendNode();
            }
     private void tvAll_AfterSelect(object sender, TreeViewEventArgs e)
            {
                if (tvAll.SelectedNode != null)
                {
    //获取选中节点的tag属性信息
                    DisplayTree dt = (DisplayTree)tvAll.SelectedNode.Tag;
    //显示对象信息....                   
                 }
            }
      

  2.   

    在TreeView的AfterSelect事件里面写
     TreeNode node = e.Node;
     node.Tag取出绑定的数据对象,你在绑定的时候要给node.Tag赋值
    如:
     void BindTree(TreeView tv, DataCollection<DepartMentSDO> modules)
            {
                DataCollection<DepartMentSDO> roots = modules.FindAll(delegate(DepartMentSDO obj) { return obj.PreDepartMentID == obj.ID; });
                roots.Sort(new Comparison<DepartMentSDO>(delegate(DepartMentSDO x, DepartMentSDO y) { return x.DepartMentLevel.CompareTo(y.DepartMentLevel); }));
                TreeNodeCollection nodes = tv.Nodes;            tv.BeginUpdate();
                nodes.Clear();            if (roots[0].DepartMentType == JYWL.Sys.Share.DepartType.调度中心)
                    BtnSearchArea.Enabled = true;
                else
                    BtnSearchArea.Enabled = false;            foreach (DepartMentSDO item in roots)
                {
                    TreeNode sNode = new TreeNode();
                    sNode.Text = item.DepartMentName;
                    sNode.Tag = item;//注意这里(item就是我的数据对象)
                    BindNode(sNode, item);                nodes.Add(sNode);            }
                tv.EndUpdate();            if (nodes.Count > 0)
                {
                    nodes[0].ExpandAll();
                }
            }        void BindNode(TreeNode node, DepartMentSDO module)
            {
                DataCollection<DepartMentSDO> subModules = DepartMentCollection.FindAll(delegate(DepartMentSDO obj) { return obj.PreDepartMentID == module.ID && obj.ID != module.ID; });
                subModules.Sort(new Comparison<DepartMentSDO>(delegate(DepartMentSDO x, DepartMentSDO y) { return x.DepartMentLevel.CompareTo(y.DepartMentLevel); }));            foreach (DepartMentSDO item in subModules)
                {
                    TreeNode sNode = new TreeNode();
                    sNode.Text = item.DepartMentName;
                    sNode.Tag = item;//注意这里(item就是我的数据对象)
                    BindNode(sNode, item);
                    node.Nodes.Add(sNode);
                }        }AfterSelect事件里面的e.Node.Tag就相当于上面绑定的item
    如果你数据来自DataTable的话,node.Tag就是DataTable
    要显示时将node.Tag转换为自己绑定时的类型,如:
    TreeNode node=e.Node;
    if(!(node.Tag is 类型))
        return;
    类型 data= node.Tag as 类型;
    这时你就可以用data对绑定在你要显示的控件
      

  3.   

    看这里:
    Asp.net的TreeView技巧大全