treeview发现问题 [英] treeview find problem
本文介绍了treeview发现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个使用数据表中的一些数据生成的树视图。
我想找到一个节点并显示它们。
我能找到...但我无法展示。
我的问题在哪里?
这是我的所有代码...
protected void Page_Load( object sender,EventArgs e)
{
if (!IsPostBack)
{
string SERVER_NAME = Request.ServerVariables [ SERVER_NAME]。ToString();
MindResources._MetodosEstaticos.server = SERVER_NAME;
BusinessLayer._MetodosEstaticos.setServer(SERVER_NAME);
DataTable dtMenu = BusinessLayer._MetodosEstaticos.GetMenuTree();
loadTreeMenu(tvMenu,dtMenu);
tvMenu.CollapseAll();
}
}
public TreeView loadTreeMenu(TreeView tvMenu,DataTable dtMenu)
{
if (dtMenu.Rows.Count > 0 )
{
foreach (DataRow menu in dtMenu.Select( Parent_Id = 179))
{
TreeNode ParentNode = new TreeNode();
ParentNode.Text = menu [ MenuName]。ToString();
tvMenu.Nodes.Add(ParentNode);
loadTreeSubMenu( ref ParentNode, int .Parse(menu [ MenuCode]。ToString()),dtMenu);
}
}
return tvMenu;
}
private void loadTreeSubMenu( ref TreeNode ParentNode, int ParentId,DataTable dtMenu)
{
DataRow [] childs = dtMenu.Select ( Parent_Id =' + ParentId + ');
foreach (DataRow dRow in childs)
{
TreeNode child = new TreeNode();
child.Text = dRow [ MenuName]。ToString();
child.Value = dRow [ MenuCode]。ToString();
ParentNode.ChildNodes.Add(child);
// 递归调用
loadTreeSubMenu( ref child, int .Parse(dRow [ MenuCode]。ToString()),dtMenu);
}
}
私有 void btnFind_Click( object sender,EventArgs e)
{
// 用法
TreeNode itemNode = null ;
foreach (TreeNode节点 in tvMenu.Nodes)
{
itemNode = FromID(tbSearch.Text,node);
if (itemNode!= null ) break 跨度>;
}
}
public TreeNode FromID( string itemId,TreeNode rootNode)
{
foreach ( rootNode中的TreeNode节点。 ChildNodes)
{
if (node.Text.Equals(itemId)) return 节点;
TreeNode next = FromID(itemId,node);
if (next!= null ) return 下一个;
}
返回 null ;
}
protected void btnProcurar_Click( object sender,EventArgs e)
{
// 用法
btnProcurar.Text = 搜索;
TreeNode itemNode = null ;
foreach (TreeNode节点 in tvMenu.Nodes)
{
itemNode = FromID(tbSearch.Text,node);
if (itemNode!= null )
{
itemNode。已选择= true ;
tvMenu.SelectedNode.Expand();
btnProcurar.Text = 是的!!!!我终于找到!!!!!;
tvMenu.FindNode(itemNode.ValuePath);
break ;
}
}
}
<%@ Page 语言 = C# AutoEventWireup = true CodeBehind = WebForm1.aspx.cs 继承 = HRC.WebForm1 %>
< 温泉n> !DOCTYPE html PUBLIC - // W3C // DTD XHTML 1.0 Transitional // EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd >
< html xmlns = http://www.w3.org/1999/xhtml >
< head runat = server >
< title > < / title >
< / head >
< 正文 >
< ; 表格 id = form1 runat = 服务器 >
< div >
< asp:TextBox runat = server id = tbSearch / > < asp:Bu tton 文字 = Procurar id = btnProcurar runat = server onclick = btnProcurar_Click < span class =code-attribute> / >
< asp:TreeView runat = server ID = tvMenu ExpandDepth = 1
NodeStyle-CssClass = treeNode
RootNodeStyle-CssClass = rootNode
LeafNodeStyle-CssClass < span class =code-keyword> = leafNode ShowLines = true
>
< LeafNodeStyle CssClass = leafNode / >
< NodeStyle CssClass = < span class =code-keyword> treeNode / >
< RootNodeStyle CssClass = rootNode / >
< < span class =code-leadattribute> SelectedNodeStyle BackColor = 蓝色 BorderColor = 黑色 BorderStyle = 实体
< span class =code-attribute> BorderWidth = 2px / >
< / asp:TreeView >
< / div < span class =code-keyword>>
< / form >
< / body >
< / html >
解决方案
我的问题,我想,在方法btnFind_Click()
中。你声明了一个TreeNode
类型的对象,最终为它分配了一些东西。但是,然后,该方法退出并因此抛弃您珍贵的TreeNode而不是显示它。
将显示代码放在此处:private void btnFind_Click( object sender,EventArgs e)
{
// 用法
TreeNode itemNode = 空跨度>;
foreach (TreeNode节点 in tvMenu.Nodes)
{
itemNode = FromID(tbSearch.Text,node);
if (itemNode!= null ) break 跨度>;
}
// 显示刚找到的节点。
if (itemNode!= null )
{
DisplayTreeNodeInfo(ItemNode) );
}
}当然,你必须编写一个方法
DisplayTreeNodeInfo()
完全适合你的需要。
I have a treeview that is generated with some data from a datatable.
I want to find a node and show them.
I can find... but i can't show.
Where is my problem?
Here is all my code...
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string SERVER_NAME = Request.ServerVariables["SERVER_NAME"].ToString();
MindResources._MetodosEstaticos.server = SERVER_NAME;
BusinessLayer._MetodosEstaticos.setServer(SERVER_NAME);
DataTable dtMenu = BusinessLayer._MetodosEstaticos.GetMenuTree();
loadTreeMenu(tvMenu, dtMenu);
tvMenu.CollapseAll();
}
}
public TreeView loadTreeMenu(TreeView tvMenu, DataTable dtMenu)
{
if (dtMenu.Rows.Count > 0)
{
foreach (DataRow menu in dtMenu.Select("Parent_Id=179"))
{
TreeNode ParentNode = new TreeNode();
ParentNode.Text = menu["MenuName"].ToString();
tvMenu.Nodes.Add(ParentNode);
loadTreeSubMenu(ref ParentNode, int.Parse(menu["MenuCode"].ToString()), dtMenu);
}
}
return tvMenu;
}
private void loadTreeSubMenu(ref TreeNode ParentNode, int ParentId, DataTable dtMenu)
{
DataRow[] childs = dtMenu.Select("Parent_Id='" + ParentId + "'");
foreach (DataRow dRow in childs)
{
TreeNode child = new TreeNode();
child.Text = dRow["MenuName"].ToString();
child.Value = dRow["MenuCode"].ToString();
ParentNode.ChildNodes.Add(child);
//Recursion Call
loadTreeSubMenu(ref child, int.Parse(dRow["MenuCode"].ToString()), dtMenu);
}
}
private void btnFind_Click(object sender, EventArgs e)
{
//Usage
TreeNode itemNode = null;
foreach (TreeNode node in tvMenu.Nodes)
{
itemNode = FromID(tbSearch.Text, node);
if (itemNode != null) break;
}
}
public TreeNode FromID(string itemId, TreeNode rootNode)
{
foreach (TreeNode node in rootNode.ChildNodes)
{
if (node.Text.Equals(itemId)) return node;
TreeNode next = FromID(itemId, node);
if (next != null) return next;
}
return null;
}
protected void btnProcurar_Click(object sender, EventArgs e)
{
//Usage
btnProcurar.Text = "Search";
TreeNode itemNode = null;
foreach (TreeNode node in tvMenu.Nodes)
{
itemNode = FromID(tbSearch.Text, node);
if (itemNode != null)
{
itemNode.Selected = true;
tvMenu.SelectedNode.Expand();
btnProcurar.Text = "Yes!!!! i finally Found!!!!!";
tvMenu.FindNode(itemNode.ValuePath);
break;
}
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="HRC.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox runat="server" id="tbSearch"/><asp:Button Text="Procurar" id="btnProcurar" runat="server" onclick="btnProcurar_Click" />
<asp:TreeView runat="server" ID="tvMenu" ExpandDepth="1"
NodeStyle-CssClass="treeNode"
RootNodeStyle-CssClass="rootNode"
LeafNodeStyle-CssClass="leafNode" ShowLines="true"
>
<LeafNodeStyle CssClass="leafNode" />
<NodeStyle CssClass="treeNode" />
<RootNodeStyle CssClass="rootNode" />
<SelectedNodeStyle BackColor="Blue" BorderColor="Black" BorderStyle="Solid"
BorderWidth="2px" />
</asp:TreeView>
</div>
</form>
</body>
</html>
解决方案
Your problem, I suppose, is in the methodbtnFind_Click()
. You're declaring an object of typeTreeNode
, eventually assigning something to it. But then, the method exits and therefore throws away your precious TreeNode instead of displaying it.
Put the displaying code here:private void btnFind_Click(object sender, EventArgs e) { //Usage TreeNode itemNode = null; foreach (TreeNode node in tvMenu.Nodes) { itemNode = FromID(tbSearch.Text, node); if (itemNode != null) break; } // Display the node just found. if( itemNode != null) { DisplayTreeNodeInfo(ItemNode); } }Of course, You will have to write a method
DisplayTreeNodeInfo()
suitable exactly for your needs.
这篇关于treeview发现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文