TreeView困惑我的问题,请大家帮忙,谢谢了!

rainID 2009-04-02 09:09:55
我的页面想CSDN社区那么,不过右边我的是一个frameset下面有很多的frame,我左边的那棵树是在程序中动态添加一些子节点,在动态生成节点时我已经给子节点的NavigateUrl赋值了的,我想实现的是当我点击左边树的子节点时,再给子节点的Target赋值(子节点的链接窗口定位到哪个框架打开),很奇怪的是,我要点击两下左边子节点才有反应,而且当我一旦成功地为Target赋值了,我再点击这个子节点,就不能再给它赋值,我想要的是当点击就给它赋值,怎么实现,还有为什么要点击两下才有反应,而且这两下不能连续,要稍微有点间隔,请大家帮帮解决下,谢谢!
...全文
177 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
walkghost 2009-04-03
  • 打赏
  • 举报
回复
这是我第二次见楼主发这个内容的帖子了。。。。
llsen 2009-04-03
  • 打赏
  • 举报
回复
 //自定义方法,给treeview榜定数据
/// <summary>
/// BindTree给Treeview绑定数据
/// </summary>
/// <param name="tv">TreeView</param>
/// <param name="ds">DataSet</param>
private void BindTree(TreeView tv, DataSet ds)
{
//得到数据条数
int cnt = ds.Tables[0].Rows.Count;
DataTable dt = ds.Tables[0];
//模块名称
string ModuleName = "";
//上条记录的模块名称
string PreModuleName = "";

//第一层节点
TreeNode FirstNode = new TreeNode();

//遍历所有记录,给各节点赋值
for (int index = 0; index < cnt; index++)
{
//模块节点的名称
ModuleName = dt.Rows[index]["model_name"].ToString();
//叶节点,并实例化
TreeNode PageNode = new TreeNode();
PageNode.Text = dt.Rows[index]["url_name"].ToString();
PageNode.Value = dt.Rows[index]["url_id"].ToString();
PageNode.NavigateUrl = dt.Rows[index]["url"].ToString();
PageNode.Target = dt.Rows[index]["target"].ToString();

//判断是否已经有过该节点,如无,添加新节点
if (ModuleName != PreModuleName)
{
TreeNode ModuleNode = new TreeNode();
ModuleNode.Target = "";
ModuleNode.Text = ModuleName;
tv.Nodes.Add(ModuleNode);
FirstNode = ModuleNode;
FirstNode.SelectAction = TreeNodeSelectAction.None;
}

FirstNode.ChildNodes.Add(PageNode);

PreModuleName = ModuleName;
}
}
Roc_Lee 2009-04-02
  • 打赏
  • 举报
回复
1楼的东西不错。收藏
yzf86211861 2009-04-02
  • 打赏
  • 举报
回复
1楼很强大
pb_stu 2009-04-02
  • 打赏
  • 举报
回复
学习啦
zzxap 2009-04-02
  • 打赏
  • 举报
回复
[CODE=C#]
TreeView拖动并存入数据库(可判断拖动)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace treeview
{
/// <summary>
/// SelectNodes选择的节点,要更新的
/// flag判断是否更新成功
/// employeeName员工表中员工姓名的列号
/// dept部门中部门名称的列号
/// </summary>
public partial class Form1 : Form
{
int employeeName = 0 ;
int dept = 0;
int employeeDept = 5;
public static string SelectNodes;

bool flag = false;

public Form1()
{
InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)
{
//Form1加载时数据绑定
dataBindTreeView();
}
//返回一个链接池
public SqlConnection getCon()
{
return new SqlConnection("server=.;database=Personnel_Manage;User ID=sa;pwd=123");
}
//得到一个包含员工表和部门表的数据集DataSet
public DataSet getDs()
{
SqlConnection con = getCon();
SqlCommand cmd = new SqlCommand("select * from employee;select * from Dept", con);
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cmd;
DataSet ds = new DataSet();
sda.Fill(ds);

return ds;



}

//绑定TreeView的方法
public void dataBindTreeView()
{
this.treeView1.Nodes.Clear();
DataSet dsAll = getDs();
DataTable Tables1 = dsAll.Tables[0];
DataTable Tables2 = dsAll.Tables[1];


for (int i = 0; i < Tables2.Rows.Count; i++)
{
TreeNode NodeDept = new TreeNode();
NodeDept.Text = Tables2.Rows[i][dept].ToString();

for (int j = 0; j < Tables1.Rows.Count; j++)
{
TreeNode NodeEmployee = new TreeNode();
string DeptN = Tables1.Rows[j][employeeDept].ToString().Trim();
if (DeptN == NodeDept.Text.Trim())
{
NodeEmployee.Text = Tables1.Rows[j][employeeName].ToString().Trim();
NodeDept.Nodes.Add("", NodeEmployee.Text, 3, 4);

}
}
treeView1.Nodes.Add(NodeDept);


}

}

//把拖放后的变化数据存入数据库
public bool UpDataDataBase(string nodeDept,string nodeEmployee)
{
SqlConnection con = getCon();

SqlCommand cmdu = new SqlCommand("UPDATE employee SET Employeebranch = " + "'" + nodeDept + "'where Employeename = '" + nodeEmployee + "'",con);
con.Open();

int count = cmdu.ExecuteNonQuery();

//成功更新返回true
if (count > 0)
return true;
else
return false;
}


#region
//如果使用者移出视窗外,便会引发DragLeave事件。

//如果滑鼠进入另一个控制项,便会引发该控制项的DragEnter事件。

//如果滑鼠移动,但是待在相同的控制项内,便会引发DragOver事件。


#endregion



#region //treeView绑定

//treeView拖动中用于存放“鼠标”上的节点
private TreeNode MyNode;

private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
//启动拖放操作,设置拖放类型为Move(移动)


TreeView theTreeView = (TreeView)sender;
TreeNode MoveNode = (TreeNode)e.Item;
if(MoveNode.Parent == null)
theTreeView.AllowDrop = false;
else
{
theTreeView.AllowDrop = true;
}
//执行拖放方法,参数是要拖放的Node和类型move

DoDragDrop(e.Item, DragDropEffects.Move);
}


private void treeView1_DragEnter(object sender, DragEventArgs e)
{
// 获取TreeNode节点类型的数据


TreeNode Objdata = (TreeNode)e.Data.GetData(typeof(TreeNode));

if (Objdata != null)
{
e.Effect = DragDropEffects.Move;


//改变进入TreeNode的背景色(土黄色)表示你要拖动的节点,
Objdata.BackColor = Color.FromArgb(195, 90, 0);
//保存此TreeNode,进入下一个时还原背景色
MyNode = Objdata;
}
else e.Effect = DragDropEffects.None;

}

private void treeView1_DragOver(object sender, DragEventArgs e)
{
//修改鼠标进入TreeNode的背景色,还原上一个TreeNode的背景色
TreeView NowTree = (TreeView)sender;
TreeNode CneterNode = NowTree.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));

if ((CneterNode != null) && (CneterNode != MyNode))
{
//指定颜色,(滑动过节点的背景颜色,)
MyNode.BackColor = Color.White;
//知道滑动过节点的字体颜色
MyNode.ForeColor = Color.Green;
if (CneterNode.Parent == null)
{
//如果是“部门节点”把颜色换成蓝色
CneterNode.BackColor = Color.FromArgb(95, 51, 255);
CneterNode.ForeColor = Color.White;
}
//一般节点为淡绿色
else
CneterNode.BackColor = Color.FromArgb(164, 220, 13);
MyNode = CneterNode;
}
}


private void treeView1_DragDrop(object sender, DragEventArgs e)
{
TreeNode theNode = (TreeNode)e.Data.GetData(typeof(TreeNode));

SelectNodes = theNode.Text;

TreeView theTree = (TreeView)sender;
TreeNode targetNode = theTree.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));
targetNode.ForeColor = Color.Green;

if (targetNode.Parent == null)
{

if (targetNode != null)
{
TreeNode targetParent = targetNode.Parent;
//删除拖放的TreeNode
theNode.Remove();
//添加到目标TreeNode下
targetNode.Nodes.Add(theNode);
targetNode.BackColor = Color.White;
theTree.SelectedNode = targetNode;

}
string parentsText = targetNode.Text;
if (UpDataDataBase(parentsText, SelectNodes))
{
flag = true;
MessageBox.Show("添加成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
SelectNodes = "";

}

else
{
MessageBox.Show("请重新选择选择员工", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
dataBindTreeView();
}

}

else
{
MessageBox.Show("请选择部门", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

if (!flag)
{

dataBindTreeView();

}

}



}
}


[/code]

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧