首先从数据库中读出数据实现treeview,数据库有三个字段NodeId,ParentId,Nodename 程序如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CreateTreeView();
}
} /// <summary>
/// 创建 TreeView
/// 此方法采取一次性加载目标数据到 DataTable,递归查询 DataTable ,创建子节点
/// </summary>
private void CreateTreeView()
{
//const int VirtualRootId = 0; // 虚拟的根节点 ID, 表中 ParentID=0 的节点表示无实际父节点
const string SQL_SELECT = "SELECT NodeId, NodeName,ParentId,Phone FROM TreeView ORDER BY NodeId ASC"; //
string connStr = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\\Visual Studio 2005\\WebSites\\00\\App_Data\\noahsoft.mdb"; ;
//
OleDbDataAdapter da = new OleDbDataAdapter(SQL_SELECT, connStr);
DataTable dt = new DataTable();
//
da.Fill(dt);
//
CreateTreeViewRecursive(TreeView1.Nodes, dt, 0);
} /// <summary>
/// 递归查询数据,创建 TreeNode 节点
/// </summary>
/// <param name="nodes"></param>
/// <param name="dataSource"></param>
/// <param name="parentId"></param>
private void CreateTreeViewRecursive(TreeNodeCollection nodes, DataTable dataSource, int parentId)
{
//
string fliter = String.Format("ParentId={0}", parentId);
// 查询子节点
DataRow[] drArr = dataSource.Select(fliter); TreeNode node;
foreach (DataRow dr in drArr)
{
//
node = new TreeNode();
nodes.Add(node);
node.Text = (string)dr["NodeName"];
node.Value = dr["Phone"].ToString();
int id = (int)dr["NodeId"];
// Response.Write(id);
// Response.Write("<br>");
// 设置其他属性
//
node.SelectAction = TreeNodeSelectAction.SelectExpand; // 递归创建子节点
CreateTreeViewRecursive(node.ChildNodes, dataSource, id); // 移除已添加行,提高性能
dataSource.Rows.Remove(dr);
}
}
之后通过点击节点将节点信息添加到TextBox1中去,点击一组则添加一组。程序如下:
string j;
protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e)
{
string s = TreeView1.SelectedNode.Value;
if (TreeView1.SelectedNode.ChildNodes.Count == 0)//点击用户时的操作
{
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", s); }
else
{
j = s;
}
TextBox1.Text = j;
}
else //点击组时的操作
{
for (int i = 0; i < TreeView1.SelectedNode.ChildNodes.Count; i++)
{
string q = TreeView1.SelectedNode.ChildNodes[i].Value; Response.Write(q);
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", q);
}
else
{
j = q;
}
TextBox1.Text = j; }
}
}
结果点击组时总是添加第一组的信息,但是自己建一个treeview自己添加数据在测试添加组成功。请大家帮忙看看。谢谢!!
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CreateTreeView();
}
} /// <summary>
/// 创建 TreeView
/// 此方法采取一次性加载目标数据到 DataTable,递归查询 DataTable ,创建子节点
/// </summary>
private void CreateTreeView()
{
//const int VirtualRootId = 0; // 虚拟的根节点 ID, 表中 ParentID=0 的节点表示无实际父节点
const string SQL_SELECT = "SELECT NodeId, NodeName,ParentId,Phone FROM TreeView ORDER BY NodeId ASC"; //
string connStr = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\\Visual Studio 2005\\WebSites\\00\\App_Data\\noahsoft.mdb"; ;
//
OleDbDataAdapter da = new OleDbDataAdapter(SQL_SELECT, connStr);
DataTable dt = new DataTable();
//
da.Fill(dt);
//
CreateTreeViewRecursive(TreeView1.Nodes, dt, 0);
} /// <summary>
/// 递归查询数据,创建 TreeNode 节点
/// </summary>
/// <param name="nodes"></param>
/// <param name="dataSource"></param>
/// <param name="parentId"></param>
private void CreateTreeViewRecursive(TreeNodeCollection nodes, DataTable dataSource, int parentId)
{
//
string fliter = String.Format("ParentId={0}", parentId);
// 查询子节点
DataRow[] drArr = dataSource.Select(fliter); TreeNode node;
foreach (DataRow dr in drArr)
{
//
node = new TreeNode();
nodes.Add(node);
node.Text = (string)dr["NodeName"];
node.Value = dr["Phone"].ToString();
int id = (int)dr["NodeId"];
// Response.Write(id);
// Response.Write("<br>");
// 设置其他属性
//
node.SelectAction = TreeNodeSelectAction.SelectExpand; // 递归创建子节点
CreateTreeViewRecursive(node.ChildNodes, dataSource, id); // 移除已添加行,提高性能
dataSource.Rows.Remove(dr);
}
}
之后通过点击节点将节点信息添加到TextBox1中去,点击一组则添加一组。程序如下:
string j;
protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e)
{
string s = TreeView1.SelectedNode.Value;
if (TreeView1.SelectedNode.ChildNodes.Count == 0)//点击用户时的操作
{
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", s); }
else
{
j = s;
}
TextBox1.Text = j;
}
else //点击组时的操作
{
for (int i = 0; i < TreeView1.SelectedNode.ChildNodes.Count; i++)
{
string q = TreeView1.SelectedNode.ChildNodes[i].Value; Response.Write(q);
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", q);
}
else
{
j = q;
}
TextBox1.Text = j; }
}
}
结果点击组时总是添加第一组的信息,但是自己建一个treeview自己添加数据在测试添加组成功。请大家帮忙看看。谢谢!!
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CreateRootNode();
}
} private void CreateRootNode()
{
TreeNode root = new TreeNode("根节点");
TreeView1.Nodes.Add(root);
//添加相应下节根节点
CrateChildNodes(root); //添加相应子节点,也可在选中后再加载,看数据量是否很大
}private void CrateChildNodes(TreeNode parentNode)
{
//递归调用本身,逐层添加子节点
//TreeNode childNode = new TreeNode("","");
//CrateChildNodes(childNode);
}protected void TreeView1_AfterSelected(object sender,TreeViewEventArgs e)
{
TreeNode curNode = e.Node;
//其他操作
}
==
这个方法你最好说明一下干了什么,看得累
这个方法是实现点击treeview一个叶子节点就把节点的value添加到TextBox1中去,如果点击组节点就把组中所有节点的value值都添加到TextBox1中。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CreateTreeView();
}
} /// <summary>
/// 创建 TreeView
/// 此方法采取一次性加载目标数据到 DataTable,递归查询 DataTable ,创建子节点
/// </summary>
private void CreateTreeView()
{
//const int VirtualRootId = 0; // 虚拟的根节点 ID, 表中 ParentID=0 的节点表示无实际父节点
const string SQL_SELECT = "SELECT NodeId, NodeName,ParentId,Phone FROM TreeView ORDER BY NodeId ASC"; //
string connStr = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\\Visual Studio 2005\\WebSites\\00\\App_Data\\noahsoft.mdb"; ;
//
OleDbDataAdapter da = new OleDbDataAdapter(SQL_SELECT, connStr);
DataTable dt = new DataTable();
//
da.Fill(dt);
//
CreateTreeViewRecursive(TreeView1.Nodes, dt, 0);
} /// <summary>
/// 递归查询数据,创建 TreeNode 节点
/// </summary>
/// <param name="nodes"> </param>
/// <param name="dataSource"> </param>
/// <param name="parentId"> </param>
private void CreateTreeViewRecursive(TreeNodeCollection nodes, DataTable dataSource, int parentId)
{
//
string fliter = String.Format("ParentId={0}", parentId);
// 查询子节点
DataRow[] drArr = dataSource.Select(fliter); TreeNode node;
foreach (DataRow dr in drArr)
{
//
node = new TreeNode();
nodes.Add(node);
node.Text = (string)dr["NodeName"];
node.Value = dr["Phone"].ToString();
int id = (int)dr["NodeId"];
// Response.Write(id);
// Response.Write(" <br>");
// 设置其他属性
//
node.SelectAction = TreeNodeSelectAction.SelectExpand; // 递归创建子节点
CreateTreeViewRecursive(node.ChildNodes, dataSource, id); // 移除已添加行,提高性能
dataSource.Rows.Remove(dr);
}
}
之后通过点击节点将节点信息添加到TextBox1中去,点击一组则添加一组。程序如下:
string j;
protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e)
{
string s = TreeView1.SelectedNode.Value;
if (TreeView1.SelectedNode.ChildNodes.Count == 0)//点击用户时的操作
{
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", s); }
else
{
j = s;
}
TextBox1.Text = j;
}
else //点击组时的操作
{
for (int i = 0; i < TreeView1.SelectedNode.ChildNodes.Count; i++)
{
string q = TreeView1.SelectedNode.ChildNodes[i].Value; Response.Write(q);
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", q);
}
else
{
j = q;
}
TextBox1.Text = j; }
}
}
{
string q = TreeView1.SelectedNode.ChildNodes[i].Value; Response.Write(q);
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", q);
}
else
{
j = q;
}
TextBox1.Text = j; }
}
}
//仅是对选择节点子节点添加,最好是做循环递归获取,测试的时候设置断点跟踪调试