要实现的功能: 点击treeview控件节点前的+号扩展节点时(不是双击该节点),以这个节点为关键字从数据库中查找一些字段,用这些字段作为新节点,插入到该节点下。我的代码如下:
1、自定义节点变量:
private TreeNode selectNode;1、首先在鼠标的mouseDown事件得到单击哪个节点:
selectNode = treeView1.GetNodeAt(e.X,e.Y);
2、在treeView控件的BeforeExpand事件中:
OleDbDataAdapter monthAdapter = new OleDbDataAdapter("select distinct month(时间) from account where year(时间)= '"+treeView1.SelectedNode.Text+"' ",mycon);
DataSet monthDataSet = new DataSet();
monthAdapter.Fill(monthDataSet,"monthtable");
foreach(DataRow mondr in monthDataSet.Tables[0].Rows)
{
TreeNode monthNode = new TreeNode(mondr[0].ToString());
selectNode.Nodes.Clear();
selectNode.Nodes.Add(monthNode);
}按理说这样应该是没有问题的,但运行时点节点前的+号展开该节点,下面的子节点还是原来那些节点,新建立的节点一个都没进来。(双击节点展开却可以实现)。最后没招了,我先把当前选择节点(treeView1.SeclectedNode)设为selectNode,插入完再恢复,这样才得以有个初步的解决:TreeNode tempNode = treeView1.SelectedNode;
treeView1.SelectedNode= selectNode;
OleDbDataAdapter monthAdapter = new OleDbDataAdapter("select distinct month(时间) from account where year(时间)= '"+treeView1.SelectedNode.Text+"' ",mycon);
DataSet monthDataSet = new DataSet();
monthAdapter.Fill(monthDataSet,"monthtable");
//treeView1.SelectedNode= selectNode;(
foreach(DataRow mondr in monthDataSet.Tables[0].Rows)
{
TreeNode monthNode = new TreeNode(mondr[0].ToString());
selectNode.Nodes.Clear();
selectNode.Nodes.Add(monthNode);
}
treeView1.SelectedNode = tempNode;
可是这样窗口就明显有个当前选择节点变化的过程(尤其是当数据库中数据较多运行时间长时),给人感觉不好。 请问高手这是怎么才能解决单击+号就能添加的题啊?实在不行,告诉我怎样在改变当前选择节点时防止树形控件自动重绘也行啊
1、自定义节点变量:
private TreeNode selectNode;1、首先在鼠标的mouseDown事件得到单击哪个节点:
selectNode = treeView1.GetNodeAt(e.X,e.Y);
2、在treeView控件的BeforeExpand事件中:
OleDbDataAdapter monthAdapter = new OleDbDataAdapter("select distinct month(时间) from account where year(时间)= '"+treeView1.SelectedNode.Text+"' ",mycon);
DataSet monthDataSet = new DataSet();
monthAdapter.Fill(monthDataSet,"monthtable");
foreach(DataRow mondr in monthDataSet.Tables[0].Rows)
{
TreeNode monthNode = new TreeNode(mondr[0].ToString());
selectNode.Nodes.Clear();
selectNode.Nodes.Add(monthNode);
}按理说这样应该是没有问题的,但运行时点节点前的+号展开该节点,下面的子节点还是原来那些节点,新建立的节点一个都没进来。(双击节点展开却可以实现)。最后没招了,我先把当前选择节点(treeView1.SeclectedNode)设为selectNode,插入完再恢复,这样才得以有个初步的解决:TreeNode tempNode = treeView1.SelectedNode;
treeView1.SelectedNode= selectNode;
OleDbDataAdapter monthAdapter = new OleDbDataAdapter("select distinct month(时间) from account where year(时间)= '"+treeView1.SelectedNode.Text+"' ",mycon);
DataSet monthDataSet = new DataSet();
monthAdapter.Fill(monthDataSet,"monthtable");
//treeView1.SelectedNode= selectNode;(
foreach(DataRow mondr in monthDataSet.Tables[0].Rows)
{
TreeNode monthNode = new TreeNode(mondr[0].ToString());
selectNode.Nodes.Clear();
selectNode.Nodes.Add(monthNode);
}
treeView1.SelectedNode = tempNode;
可是这样窗口就明显有个当前选择节点变化的过程(尤其是当数据库中数据较多运行时间长时),给人感觉不好。 请问高手这是怎么才能解决单击+号就能添加的题啊?实在不行,告诉我怎样在改变当前选择节点时防止树形控件自动重绘也行啊
应该是用e.Node就可以
感谢帮助,但我没有试成功,能再帮看一下吗?
我将foreach循环中的语句改为:
TreeNode monthNode = new TreeNode(mondr[0].ToString());
e.Node.Nodes.Clear();
e.Node.Nodes.Add(monthNode);
一样没有反应
select distinct month(时间) from account where year(时间)= '"+treeView1.SelectedNode.Text+"'不应该是treeView1.SelectedNode.Text,而应该是selectNode.Text,即我自己单击的节点,或者直接是e.node.结帐