2010-03-18 11 views
2

J'ai un treeview, et déjà le code javascript pour publier la page. Parce que quand je sélectionne le père, sélectionnez automatiquement les enfants.treeview et postback

ceci est mon code html

<script> 
           function postBackCheckBox() 
           { 
            var o = window.event.srcElement; 
            if (o.tagName == 'INPUT' && o.type == 'checkbox' && o.name != null && o.name.indexOf('CheckBox') > -1) 
            { 
             __doPostBack('LinkButton1', ''); 
            } 
           } 
          </script> 

          <asp:UpdatePanel UpdateMode="Conditional" ID="UpdatePanel1" runat="server"> 
           <ContentTemplate> 
            <asp:TreeView ID="HierarchicalTreeView" runat="server" OnSelectedNodeChanged="HierarchicalTreeView_SelectedNodeChanged" 
             ShowLines="True" ExpandImageToolTip="Fechar &quot;{0}&quot;" CollapseImageToolTip="Fechar &quot;{0}&quot;" 
             ExpandDepth="1" OnTreeNodeCheckChanged="HierarchicalTreeView_TreeNodeCheckChanged" 
             EnableClientScripts="true"> 
             <NodeStyle CssClass="text" /> 
             <SelectedNodeStyle CssClass="text" Font-Bold="true" /> 
            </asp:TreeView> 
           </ContentTemplate> 
           </asp:UpdatePanel> 
          <asp:LinkButton ID="LinkButton1" runat="server" Visible="false"></asp:LinkButton> 

et en C#

HierarchicalTreeView.Attributes.Add("onclick", "postBackCheckBox()"); 
ScriptManager scripManager = (ScriptManager)Page.Master.FindControl("ScriptManagerMaster"); 
scripManager.RegisterAsyncPostBackControl(LinkButton1); 

Comment puis-je empêcher de postback toutes les pages, et seulement la vue arborescente ???, donc ne 'rafraîchir' la page

Répondre

3
<asp:UpdatePanel UpdateMode="Conditional" ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:TreeView ID="HierarchicalTreeView" runat="server" OnSelectedNodeChanged="HierarchicalTreeView_SelectedNodeChanged" 
      ShowLines="True" ExpandImageToolTip="Fechar &quot;{0}&quot;" CollapseImageToolTip="Fechar &quot;{0}&quot;" 
      ExpandDepth="10" 
      OnTreeNodeCheckChanged="HierarchicalTreeView_TreeNodeCheckChanged" 
      ontreenodeexpanded="HierarchicalTreeView_TreeNodeExpanded"> 
      <NodeStyle CssClass="text" /> 
      <SelectedNodeStyle CssClass="text" Font-Bold="true" /> 
     </asp:TreeView>                  
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="buttonCheck" EventName="click" /> 
    </Triggers> 
</asp:UpdatePanel> 

<asp:button ID="buttonCheck" runat="server" CausesValidation="false" /> 

C# Code

buttonCheck.Attributes.CssStyle["visibility"] = "hidden"; 
      HierarchicalTreeView.Attributes.Add("onclick", string.Format("document.getElementById('{0}').click();", buttonCheck.ClientID)); 
      ScriptManager scripManager = (ScriptManager)Page.Master.FindControl("ScriptManagerMaster"); 
      scripManager.RegisterAsyncPostBackControl(buttonCheck); 
1

Vous devez utiliser Ajax pour cela, par exemple Placez votre treeview dans UpdatePanel.

Essayez d'appeler __doPostBack fonction comme ceci:

__doPostBack('<%= LinkButton1.ClientID %>', ''); 
+0

vous pouvez poster votre code mis à jour ici –

+0

Essayez de changer la façon dont vous appelez __doPostBack –

+0

Son parce linkbutton est pas dans le UpdatePanel. Essayez de le placer à l'intérieur du panneau. –

1

Il est stupide de permettre case à cocher dans TreeView mais ne pas avoir le gestionnaire d'événements pour it..this est un travail autour si vous n'utilisez pas SelectNodeChanged à d'autres fins, essayez ceci, au lieu de cliquer directement sur la case à cocher, vous cliquez sur le nœud, mais votre utilisateur doit être informé à ce sujet :)

Protected Sub tvCust_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvCust.SelectedNodeChanged 
    Dim enode As TreeNode = tvCust.SelectedNode 
    If enode.Checked = False Then 
     enode.Checked = True 
    Else 
     enode.Checked = False 
    End If 
    tvCust_TreeNodeCheckChanged(enode) 
End Sub 

Protected Sub tvCust_TreeNodeCheckChanged(ByVal e As TreeNode) 
    Try 
     Select Case e.Depth 
      Case 0 'parent 
       Dim child As TreeNode 
       For Each child In e.ChildNodes 
        child.Checked = e.Checked 
       Next 
      Case Else 
       Dim cnt As Integer = 0 
       Dim child As TreeNode 
       For Each child In e.Parent.ChildNodes 
        If child.Checked = True Then 
         cnt += 1 
        End If 
       Next 
       If cnt = e.Parent.ChildNodes.Count Then 
        e.Parent.Checked = True 
       Else 
        e.Parent.Checked = False 
       End If 
     End Select 

    Catch ex As Exception 

    End Try 
End Sub