treeview闪烁问题?急!!
我按以下方法做,点击treeview屏幕不会闪烁,但onSelectedIndexChange事件却无效,该怎么办?
可以将autopostback设置成false;
在body里添加 <body onload="initTree()">
然后在PageLoad里写:
Dim strTreeName As String = "Treeview1"
Dim strRef As String = Page.GetPostBackEventReference(Treeview1)
Dim strScript As String = "<script language='JavaScript'> " & vbCrLf _
& "<!-- " & vbCrLf _
& " function initTree() { " & vbCrLf _
& " " & strTreeName & ".onSelectedIndexChange = function() { " & vbCrLf _
& " if (event.oldTreeNodeIndex != event.newTreeNodeIndex) " & vbCrLf _
& " this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex + ',' + event.newTreeNodeIndex); " & vbCrLf _
& " window.setTimeout('" & strRef.Replace("'", "\'") & "', 0, 'JavaScript'); " & vbCrLf _
& " } " & vbCrLf _
& " } " & vbCrLf _
& "// --> " & vbCrLf _
& "</script>"
Page.RegisterClientScriptBlock("InitTree", strScript)
这样就只有你点击的节点更改的时候才提交!
问题点数:30、回复次数:16Top
1 楼BabyTree(小树)回复于 2003-08-01 13:48:29 得分 0
不可避免!Top
2 楼yy6439()回复于 2003-08-01 14:12:41 得分 0
upTop
3 楼ylaoei(♂稻草人.net)回复于 2003-08-01 14:24:08 得分 0
关注!高手快来呀!Top
4 楼DoNotTomcat(TOM)回复于 2003-08-01 14:34:18 得分 0
帮你顶。Top
5 楼showjun(俊俊)回复于 2003-08-01 15:42:50 得分 0
我也顶Top
6 楼hgknight(江雨.net)回复于 2003-08-01 16:08:22 得分 0
上面的方法没错,应该是你其他地方的问题Top
7 楼yy6439()回复于 2003-08-01 16:22:31 得分 0
to hgknight(江雨.net)
我用的就是csdn上的第二种方法,屏幕不会闪烁,但onSelectedIndexChange事件也无效,从js的内容看,应该是替换了onSelectedIndexChange事件,是不是onSelectedIndexChange应该全部在js脚本中写呢?但我需要的是在服务器端的事件,怎么办?Top
8 楼zhiyue(响沙)回复于 2003-08-01 16:37:31 得分 0
关注Top
9 楼hgknight(江雨.net)回复于 2003-08-01 16:47:20 得分 30
我知道,第二种方法就是我写的
不知道你那儿为什么会出问题
你新建一个页面测试一下Top
10 楼oceanyan(ocean_Yan)回复于 2003-08-01 17:04:16 得分 0
第2种方法在哪里?我也遇到了一样的问题我是把treeview在帮定时全不展开来减少用户的
点击次数的,实在是不能忍 那为大哥解决了 给点提示啊!Top
11 楼yzhfirst(asdf)回复于 2003-08-01 17:09:20 得分 0
试试下面两种方法-----------转载-----
已经无数次见到有人提出这个问题了。。。。。
第一种。。。。。
用.net控件TreeView而展开时不刷新的变通方法主要有以下步骤:
1。在Page_Load中为你的TreeView添加以下属性,这句话为TreeView添加Click时的回发事件。
TreeView1.Attributes["OnClick"] = @"javascript: window.setTimeout('__doPostBack(\'TreeView1\',\'\')', 0, 'JavaScript')";
2。在.aspx页面文件中添加一个隐藏的Button用来产生TreeView的回发事件:
<INPUT id="Button1" style="DISPLAY:none;" type="button" value="Button" name="Button1" runat="server">
这个Button必须为Html控件,并将其转为在服务器端运行。
style="DISPLAY:none;"该句用来在页面隐藏Button。
在Visual.net的设计界面双击该Button产生以下事件:
private void Button1_ServerClick(object sender,System.EventArgs e)
{
}
这里不用添加任何代码,目的是当服务器处理该页面并发送给客户端时产生下面客户端脚本:
<script language="javascript">
<!--
function __doPostBack(eventTarget, eventArgument) {
var theform = document.Form1;
theform.__EVENTTARGET.value = eventTarget;
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</script>
这段代码用于回应TreeView的Click事件。。。。。。。。。。。。。。。。。。。此代码不用手工添加。。。。。
3。好。。。大功告成。。。为你的TreeView添加TreeView1_SelectedIndexChange事件:
在设计界面,TreeView上右键属性。。。事件。。找到SelectedIndexChange。。。双击。。在cs文件中产生。。
private void TreeView1_SelectedIndexChange(object sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
}
在里面添加测试代码。。。
Microsoft.Web.UI.WebControls.TreeNode NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);
Response.Write(NewNode.GetNodeIndex());
测试地址。。。。
http://eu.webmatrixhosting.net/ganggang/tree.aspx。。。
有点慢大家谅解。。。
第二种。。。。。
关于类似的TreeView展开不提交,点击才提交,我也有一个方法。。。此乃hgknight方法也。。。。
http://eu.webmatrixhosting.net/hgknight/tree.aspx
方法如下
可以将autopostback设置成false;
在body里添加 <body onload="initTree()">
然后在PageLoad里写:
string strTreeName = "TreeView1";
string strRef = Page.GetPostBackEventReference(TreeView1);
string strScript = "<script language=\"JavaScript\"> \n" + "<!-- \n" + " function initTree() { \n" +" " + strTreeName + ".onSelectedIndexChange = function() { \n" + "if (event.oldTreeNodeIndex !=
event.newTreeNodeIndex) \n" + "this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex + ',' + event.newTreeNodeIndex); \n" + "window.setTimeout('" + strRef.Replace("'","\\'") + "', 0, 'JavaScript'); \n" + " } \n" + " } \n" + "// --> \n" + "</script>";
Page.RegisterClientScriptBlock("InitTree",strScript );
这样就只有你点击的节点更改的时候才提交!
个人认为。。。。hgknight(江雨.net)的方法要更好一点。。。
虽然原理相似。。。但我的用的是Click事件。。这导致。。。点击同一节点时也会回发页面。。。。虽然这时不会触发。。。。SelectedIndexChange事件。。。这一点需要改进。。。。。
Top
12 楼yy6439()回复于 2003-08-02 10:27:44 得分 0
to hgknight(江雨.net)
我已经新建了页面测试,还是不行,你把treeview的autopostback属性设为false,treeview就无法响应服务器端的onSelectedIndexChange事件,你写的js代码inittree是否实现激活onSelectedIndexChange事件的功能,我看好象不是,但如果不是的话,就是我目前的现象:屏幕不会闪烁,但onSelectedIndexChange事件也无效.
如果方便能否给我一段源代码学习,不胜感激!我的E_mail:yy@fykj.com
Top
13 楼ljlove99(小剑)回复于 2003-08-02 10:44:30 得分 0
江雨的代码我原来也试过几次~
都不行~都还是有闪烁~
CSDN.net论坛中的treeview就没闪烁~不知道怎么搞的!!
真想知道啊~~Top
14 楼yy6439()回复于 2003-08-02 10:50:56 得分 0
upTop
15 楼yy6439()回复于 2003-08-02 10:51:50 得分 0
upTop
16 楼yy6439()回复于 2003-08-02 11:04:41 得分 0
upTop



