点击treeview根节点把其value添加到TextBox控件中,点击一个组把整个组的节点value添加到TextBox中,代码如下:
string j ;
string q;
protected void treeMenu_SelectedNodeChanged(object sender, EventArgs e)
{
// Message.Text = "You selected: " + treeMenu.SelectedNode.Text ; if (treeMenu.SelectedNode.ChildNodes.Count == 0)//点击用户时的操作
{
string s = treeMenu.SelectedNode.Value ;
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", s); }
else
{
j = s;
}
TextBox1.Text = j;
}
else //点击组时的操作
{
//q = treeMenu.SelectedNode.ChildNodes[0].Text;
for (int i = 0; i < treeMenu.SelectedNode.ChildNodes.Count; i++)
{
q = treeMenu.SelectedNode.ChildNodes[i].Value ;
Response.Write(q);
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", q);
}
else
{
j = q;
}
TextBox1.Text = j;
}
}
为什么无论点那个组,添加的都是第一组的value?
string j ;
string q;
protected void treeMenu_SelectedNodeChanged(object sender, EventArgs e)
{
// Message.Text = "You selected: " + treeMenu.SelectedNode.Text ; if (treeMenu.SelectedNode.ChildNodes.Count == 0)//点击用户时的操作
{
string s = treeMenu.SelectedNode.Value ;
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", s); }
else
{
j = s;
}
TextBox1.Text = j;
}
else //点击组时的操作
{
//q = treeMenu.SelectedNode.ChildNodes[0].Text;
for (int i = 0; i < treeMenu.SelectedNode.ChildNodes.Count; i++)
{
q = treeMenu.SelectedNode.ChildNodes[i].Value ;
Response.Write(q);
if (TextBox1.Text != "")
{
j = String.Concat(TextBox1.Text, ",", q);
}
else
{
j = q;
}
TextBox1.Text = j;
}
}
为什么无论点那个组,添加的都是第一组的value?
for (int i = 0; i < treeMenu.SelectedNode.ChildNodes.Count; i++)
{
q = treeMenu.SelectedNode.ChildNodes[i].Value ;
Response.Write(q);
if (TextBox1.Text != "")
{
j += String.Concat(TextBox1.Text, ",", q);
}
else
{
j+ = q;
}
TextBox1.Text = j;
}
}
看红色部分
{
q = treeMenu.SelectedNode.ChildNodes[i].Value ;
Response.Write(q);
if (TextBox1.Text != "")
{
TextBox1.Text+=treeMenu.SelectedNode.ChildNodes[i].Value ; }
}
例如 我有 朋友,同事,同学三个组 不论点击同事还是同学添加的都是朋友分组的数据
需要比较奇怪。
,可能8楼只实现了treeMenu.SelectedNode.ChildNodes.Count != 0时候的需求!
treeMenu.SelectedNode.ChildNodes[i].Value ; 显示始终是你选中结点的文本值
这个数据库没关系吧
1000
1001
1002
2000
2001
2002
....
....
当你选中1000时
文本框中是 1001,1002
继续点就变成1001,1002,2001,2002
但是我加上从数据库中读数据创建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);
OleDbConnection myConnection = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings["con"]);
//
CreateTreeViewRecursive(treeMenu.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 ();
// 设置其他属性
//
// 递归创建子节点
CreateTreeViewRecursive(node.ChildNodes, dataSource, (int)dr["NodeId"]); // 移除已添加行,提高性能
dataSource.Rows.Remove(dr);
}
}
这是怎么回事啊!弄了一天了,郁闷死了。