Web控件TreeView展开无闪烁的两个解决方法
生活随笔
收集整理的這篇文章主要介紹了
Web控件TreeView展开无闪烁的两个解决方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
已經無數次見到有人提出這個問題了。。。。。 ?
?
第一種。。。。。 ?
?
用.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 ?οnlοad="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事件。。。這一點需要改進。。。。。
?
第一種。。。。。 ?
?
用.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 ?οnlοad="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事件。。。這一點需要改進。。。。。
轉載于:https://www.cnblogs.com/Nina-piaoye/archive/2006/09/11/500922.html
總結
以上是生活随笔為你收集整理的Web控件TreeView展开无闪烁的两个解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阅读《Google成功七堂课》
- 下一篇: 电脑注册表被停用