采用treeview控件,从数据库填写3级节点,我采用TreeNodePopulate方法,treeview各级节点前面显示checkbox,已经实现;
此外,程序要求根据两个dropdownlist(ddl_ProductMode和ddl_ViewMode)的变化,动态更新树的显示内容,当改变其中一个dropdownlist的SelectedIndexChanged的时候,存在先前树的展开节点不刷新的问题;为此,我每次更新树的显示内容之前首先用tree.Nodes.Clear()方法,清空树,然后从RootNode开始,用程序重新添加所有节点;至此,树的显示已经没有问题。现在的问题是:在每次页面加载之后,单击叶节点,不能触发SelectedNodeChanged函数,同时所有节点收缩到RootNode;但是第二次单击时,能够触发,第三次不能触发,然后依次循环。选中节点前面的checkbox(使用了javascript在客户端实现父子节点级联选中)时,也是这种现象,第一次页面加载时,客户端选中,但服务器端没有选中,页面刷新了一次后(如,单击页面的一个按钮或改变其中一个dropdownlist的selectindex),就好使了,然后又不好使-好使循环。我现在认为,主要的原因是treeview在客户端激发的事件没有发送服务器端处理,请问如何解决这个问题?还请知道的指点一下!!
此外,程序要求根据两个dropdownlist(ddl_ProductMode和ddl_ViewMode)的变化,动态更新树的显示内容,当改变其中一个dropdownlist的SelectedIndexChanged的时候,存在先前树的展开节点不刷新的问题;为此,我每次更新树的显示内容之前首先用tree.Nodes.Clear()方法,清空树,然后从RootNode开始,用程序重新添加所有节点;至此,树的显示已经没有问题。现在的问题是:在每次页面加载之后,单击叶节点,不能触发SelectedNodeChanged函数,同时所有节点收缩到RootNode;但是第二次单击时,能够触发,第三次不能触发,然后依次循环。选中节点前面的checkbox(使用了javascript在客户端实现父子节点级联选中)时,也是这种现象,第一次页面加载时,客户端选中,但服务器端没有选中,页面刷新了一次后(如,单击页面的一个按钮或改变其中一个dropdownlist的selectindex),就好使了,然后又不好使-好使循环。我现在认为,主要的原因是treeview在客户端激发的事件没有发送服务器端处理,请问如何解决这个问题?还请知道的指点一下!!
解决方案 »
- 关于asp.net mvc2.0缓存的问题
- jquery load 在google下报错
- gridview控件显示问题
- 求两个正则表达式
- ValidationExpression = "(\(\d{3}\)|\d{3}-)?\d{8}";
- ASP.NET代码里可以弹出消息框吗?类似与VB中的MsgBox()的有吗?谢谢啦 在线等
- 关于treeview控件的使用,我的工具箱中没有这个控件,请问如何添加,小弟刚刚接触.net,郁闷阿
- 一个DataGrid的问题
- 如果有三个网站的数据库内容都放到一个数据库中,这样三个网站读数据库的时候会不会影响速度??
- 给错分了, saucer(思归, MS .NET MVP)请进
- CSDN 2006年度最有价值专家MVP评选活动
- 新手急问:asp.net(c#)中动态创建控件的问题????
public void Page_Load(object sender, EventArgs e)
{
this.PlaceHolder1.Controls.Add(tv_ViewProduct);
//---------------显示树之前首先清空树上的历史节点----------------------//
tv_ViewProduct.Nodes.Clear();
//---------------显示树之前首先清空树上的历史节点-------------------//
this.tv_ViewProduct.ID = "tv_ViewProduct";
this.tv_ViewProduct.Attributes.Add("OnTreeNodeCheckChanged", "tv_ViewProduct_TreeNodeCheckChanged");
this.tv_ViewProduct.Attributes.Add("runat", "server");
this.tv_ViewProduct.ShowLines = true;
this.tv_ViewProduct.Attributes.Add("ImageSet", "Simple");
this.tv_ViewProduct.Attributes.Add("MaxDataBindDepth", "3");
this.tv_ViewProduct.Attributes.Add("RootNodeStyle-Font-Size", "11pt");
this.tv_ViewProduct.Attributes.Add("NodeStyle-imageUrl", "~/pic5555/treenode.png");
TreeNode RootNode = new TreeNode("成件", "成件");
RootNode.PopulateOnDemand = true;
RootNode.ImageUrl = "~/pic/root_treenode.png";
RootNode.ShowCheckBox = true;
RootNode.SelectAction = TreeNodeSelectAction.Expand;
RootNode.Checked = true;
tv_ViewProduct.Nodes.Add(RootNode);
tv_ViewProduct.TreeNodePopulate += new TreeNodeEventHandler(tv_ViewProduct_TreeNodePopulate);//展开成件树
tv_ViewProduct .SelectedNodeChanged +=new EventHandler(tv_ViewProduct_SelectedNodeChanged); //触发单击叶节点事件
this.tv_ViewProduct.Attributes.Add("onclick", "CheckEvent()");//操作成件树的复选框}
最好在页面中声名不知道你的具体处理,放到 Page_Init 里面试试吧
试了放到Page_Init
但是每次页面刷新之后,都多出一棵树
如果按照if(!IsPostBack)loadtree()处理
每次改变dropdownlist之后,页面刷新就不能显示tree了!因为现在执行SelectedNodeChanged的时候,症状很有规律,隔一次点击就好使,会不会是某个属性的设置问题?或者是缓存的原因?
public void Page_Load(object sender, EventArgs e)
{
this.PlaceHolder1.Controls.Add(tv_ViewProduct);
//---------------显示树之前首先清空树上的历史节点-------------------//
this.tv_ViewProduct.ID = "tv_ViewProduct";
if(!IsPostBack)
{
tv_ViewProduct.Nodes.Clear();
this.tv_ViewProduct.Attributes.Add("OnTreeNodeCheckChanged", "tv_ViewProduct_TreeNodeCheckChanged");
this.tv_ViewProduct.Attributes.Add("runat", "server");
this.tv_ViewProduct.ShowLines = true;
this.tv_ViewProduct.Attributes.Add("ImageSet", "Simple");
this.tv_ViewProduct.Attributes.Add("MaxDataBindDepth", "3");
this.tv_ViewProduct.Attributes.Add("RootNodeStyle-Font-Size", "11pt");
this.tv_ViewProduct.Attributes.Add("NodeStyle-imageUrl", "~/pic5555/treenode.png");
TreeNode RootNode = new TreeNode("成件", "成件");
RootNode.PopulateOnDemand = true;
RootNode.ImageUrl = "~/pic/root_treenode.png";
RootNode.ShowCheckBox = true;
RootNode.SelectAction = TreeNodeSelectAction.Expand;
RootNode.Checked = true;
tv_ViewProduct.Nodes.Add(RootNode);
tv_ViewProduct.TreeNodePopulate += new TreeNodeEventHandler(tv_ViewProduct_TreeNodePopulate);//展开成件树tv_ViewProduct .SelectedNodeChanged +=new EventHandler(tv_ViewProduct_SelectedNodeChanged); //触发单击叶节点事件
this.tv_ViewProduct.Attributes.Add("onclick", "CheckEvent()");//操作成件树的复选框
}
}
有什么问题再问撒
这样改变dropdownlist选择不同的浏览模式后,已经展开的树节点不会更新
root
a
- 2
-- x
- 3
-- y
b
- 2
-- z
- 3
-- z
改变后的预期效果
root
2
- a
-- x
- b
-- z
3
- a
-- y
- b
-- z
不知道如何从数据库读取,下面这个函数看不明白,
看到好多人引了这篇文章,但都没有注释啊protected void LoadChildNode(TreeNode node)
{ DirectoryInfo directory;
directory = new DirectoryInfo(node.Value); foreach (DirectoryInfo sub in directory.GetDirectories())
{ TreeNode subNode = new TreeNode(sub.Name);
subNode.Value = sub.FullName; try
{
if (sub.GetDirectories().Length > 0 || sub.GetFiles().Length > 0)
{
subNode.SelectAction = TreeNodeSelectAction.SelectExpand;
subNode.PopulateOnDemand = true;
subNode.NavigateUrl = "#";
}
}
catch { subNode.ImageUrl = "WebResource.axd?a=s&r=TreeView_XP_Explorer_ParentNode.gif&t=632242003305625000"; }
node.ChildNodes.Add(subNode); } foreach (FileInfo fi in directory.GetFiles())
{
TreeNode subNode = new TreeNode(fi.Name);
node.ChildNodes.Add(subNode);
}
}
鐢╮emoveat涓嶈涔