Asp.Net Treeview选择相同的节点不会触发

时间:2013-05-09 09:26:56

标签: asp.net treeview

我有一个asp.net树视图,它使用OnSelectedNodeChanged事件并且工作正常,但是如果你再次单击同一个节点它不会触发,任何想法如何绕过这个?

树形目录:

<asp:TreeView ID="tvSOWASP" runat="server" ImageSet="Arrows" 
        ShowLines="True" OnTreeNodePopulate="PopulateNode" OnSelectedNodeChanged="SelectNode">
            <HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
            <Nodes>
                <asp:TreeNode Expanded="True" ImageUrl="~/tree2/icons/book.gif" 
                    SelectAction="None" Text="Schemes Of Work" Value="Schemes Of Work">
                </asp:TreeNode>
            </Nodes>
            <NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" 
                HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" />
            <ParentNodeStyle Font-Bold="False" />
            <SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" 
                HorizontalPadding="0px" VerticalPadding="0px" />    
        </asp:TreeView>

代码隐藏:

protected void SelectNode(Object sender, EventArgs e)
{
    // Code here, ok when select any node, select same node and this code is not hit
}

5 个答案:

答案 0 :(得分:5)

嘿,请试试这个。

protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e){
// Do whatever you're doing
TreeView1.SelectedNode.Selected = false;
}

希望它可以帮到你

答案 1 :(得分:0)

根据我的OnSelectedNodeChanged事件,任何控件都将是该控件的ID,其中包含控件名称为tvSOWASP的事件名称,因此它的事件将是tvSOWASP_SelectedNodeChanged而不是SelectNode所以更改您的SelectedNodeChanged事件与我的代码一样

protected void tvSOWASP_SelectedNodeChanged(object sender, EventArgs e)
{
// Your code...
}

所以请从代码中移除OnSelectedNodeChanged="SelectNode",然后点击活动,尝试按照我提到的方式制作新活动。

希望它理解并为你工作。

答案 2 :(得分:0)

当您再次单击同一节点时,它不会触发,因为第二次选择没有改变,因此selectednodechanged事件不会触发。

请参阅this link

答案 3 :(得分:0)

我发现在SelectedNodeChanged事件结束时取消选择当前节点会导致稍后在页面周期中出现问题。控件本身呈现时,没有显示选定的节点。

相反,我向Page_Load事件中添加了一些代码以清除当前选择。

protected void Page_Load(object sender, EventArgs e)
{
    if(IsPostBack) {
        string eventTarget = Page.Request["__EVENTTARGET"];
        if(eventTarget == TreeView1.ClientID.Replace('_', '$')) {
            // The TreeView is posting back a selection change
            // Clear out any existing selection so that selecting the same now 
            // will trigger the change event.

            TreeView1.SelectedNode.Selected = false;
        }
    }
}

答案 4 :(得分:-1)

使用e.Node.Collapse();在treeView_TreeNodeExpanded