各位前辈大家好~请问如何实现通过点击不同的treeview节点~在右侧的的表格中将相应的行显示在Gridview的最上方 首先我左边的treeview结构是根据右侧表格中的层次关系(有一项代表节次)而动态生成的,现在我想实现通过点击不同的treeview节点,右侧动态定位到相应的表格行显示出来,怎么实现呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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;//显示对象信息.... } } 在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对绑定在你要显示的控件 看这里:Asp.net的TreeView技巧大全 C#里关于FormClosing事件的问题 combox中,如何获取选中的值? 我想hook ShellExecute函数,请给点意见。。。 请问这个onpaint方法怎么写 关于.net问题 高分求教:如何通过反射调用一个具有“被params关键字修饰的参数”的函数? 请教一个打印问题~ 如何才能够得到web开发时鼠标的当前坐标,注意不是在form中,是在WEB里。 关于DataGrid 请高手指教这个问题 WaitForInputIdle 如何用控件openfiledialog打开txt导入datagridview中的第一列?
//加载树形节点
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;
//显示对象信息....
}
}
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对绑定在你要显示的控件
Asp.net的TreeView技巧大全