在 asp .net 中绑定树视图结构?
Binding a tree view structure , in asp .net?
我尝试使用下面的
创建 asp,net 树视图结构
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView
ID="TreeView1"
runat="server" />
</div>
</form>
并且在代码背后
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
PopulateTreeView();
}
private void PopulateTreeView()
{
DataTable treeViewData = GetTreeViewData();
AddTopTreeViewNodes(treeViewData);
}
private DataTable GetTreeViewData()
{
string selectCommand = "SELECT top 10 idx_client,idx_branch,client_name FROM tbl_client";
string conString =System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlDataAdapter dad = new SqlDataAdapter(selectCommand, conString);
DataTable dtblDiscuss = new DataTable();
dad.Fill(dtblDiscuss);
return dtblDiscuss;
}
private void AddTopTreeViewNodes(DataTable treeViewData)
{
DataView view = new DataView(treeViewData);
foreach (DataRowView row in view)
{
TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString());
TreeView1.Nodes.Add(newNode);
newNode.PopulateOnDemand = true;
AddChildTreeViewNodes(treeViewData, newNode);
}
}
private void AddChildTreeViewNodes(DataTable treeViewData, TreeNode parentTreeViewNode)
{
DataView view = new DataView(treeViewData);
foreach (DataRowView row in view)
{
TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString());
parentTreeViewNode.ChildNodes.Add(newNode);
newNode.PopulateOnDemand = true;
AddChildTreeViewNodes(treeViewData, newNode);
}
}
但是它给出了一个异常
Cannot evaluate expression because the current thread is in a stack overflow state
请指出需要进行哪些更改,因为我是第一次使用此树视图
我将如何解决异常。谁能帮帮我
问题出在你在AddChildTreeViewNodes
中的递归调用:
private void AddChildTreeViewNodes(DataTable treeViewData, TreeNode parentTreeViewNode)
{
DataView view = new DataView(treeViewData);
foreach (DataRowView row in view)
{
TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString());
parentTreeViewNode.ChildNodes.Add(newNode);
newNode.PopulateOnDemand = true;
// error caused by recursion below
AddChildTreeViewNodes(treeViewData, newNode); // calls itself again REMOVE THIS
}
}
这里发生的事情是您正在插入视图的子节点,然后尝试在其中插入另一个子节点(这反过来会做同样的事情)。这将一直发生,直到堆栈被炸毁。
我怀疑你真的不需要我标记为 REMOVE THIS
的行
我尝试使用下面的
创建 asp,net 树视图结构 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView
ID="TreeView1"
runat="server" />
</div>
</form>
并且在代码背后
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
PopulateTreeView();
}
private void PopulateTreeView()
{
DataTable treeViewData = GetTreeViewData();
AddTopTreeViewNodes(treeViewData);
}
private DataTable GetTreeViewData()
{
string selectCommand = "SELECT top 10 idx_client,idx_branch,client_name FROM tbl_client";
string conString =System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlDataAdapter dad = new SqlDataAdapter(selectCommand, conString);
DataTable dtblDiscuss = new DataTable();
dad.Fill(dtblDiscuss);
return dtblDiscuss;
}
private void AddTopTreeViewNodes(DataTable treeViewData)
{
DataView view = new DataView(treeViewData);
foreach (DataRowView row in view)
{
TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString());
TreeView1.Nodes.Add(newNode);
newNode.PopulateOnDemand = true;
AddChildTreeViewNodes(treeViewData, newNode);
}
}
private void AddChildTreeViewNodes(DataTable treeViewData, TreeNode parentTreeViewNode)
{
DataView view = new DataView(treeViewData);
foreach (DataRowView row in view)
{
TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString());
parentTreeViewNode.ChildNodes.Add(newNode);
newNode.PopulateOnDemand = true;
AddChildTreeViewNodes(treeViewData, newNode);
}
}
但是它给出了一个异常
Cannot evaluate expression because the current thread is in a stack overflow state
请指出需要进行哪些更改,因为我是第一次使用此树视图 我将如何解决异常。谁能帮帮我
问题出在你在AddChildTreeViewNodes
中的递归调用:
private void AddChildTreeViewNodes(DataTable treeViewData, TreeNode parentTreeViewNode)
{
DataView view = new DataView(treeViewData);
foreach (DataRowView row in view)
{
TreeNode newNode = new TreeNode(row["client_name"].ToString(), row["idx_client"].ToString());
parentTreeViewNode.ChildNodes.Add(newNode);
newNode.PopulateOnDemand = true;
// error caused by recursion below
AddChildTreeViewNodes(treeViewData, newNode); // calls itself again REMOVE THIS
}
}
这里发生的事情是您正在插入视图的子节点,然后尝试在其中插入另一个子节点(这反过来会做同样的事情)。这将一直发生,直到堆栈被炸毁。
我怀疑你真的不需要我标记为 REMOVE THIS