Customize a treeView : adding linkbutton in treeNodes

Rate It (1)

Last post 01-23-2009 8:33 AM by Dje33510. 2 replies.

Sort Posts:

  • Customize a treeView : adding linkbutton in treeNodes

    01-19-2009, 6:26 AM
    • Member
      point Member
    • Dje33510
    • Member since 12-10-2008, 8:26 AM
    • Posts 7

     Hi,

    Sorry for my bad english.

    I try to customize my Treeview, i have a problem to add a control in my treenodes. I created a custom treenode class which inherit from treenode class but this not run.

     My code aspx:

     
    <%@ Page Title="Droits" Language="vb" AutoEventWireup="false" MasterPageFile="~/MasterPage.Master" CodeBehind="gestDroits.aspx.vb" Inherits="CRM.WebForm9" %>
    <%@ Register Assembly="CRM" Namespace="CRM.DerivedControls" TagPrefix="cc2" %>


    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div id="conteneurcorps">
    <div class="conteneurCreaUser">
    <cc2:MyUpdatePanel ID="MyUpdatePanelGlobal" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
    <ContentTemplate>
    <strong><h3>Droits</h3></strong><br />
    <asp:TreeView ID="treeDroit" runat="server" EnableClientScript="true" ForeColor="Black" PopulateNodesFromClient="true">
    </asp:TreeView>
    </ContentTemplate>
    </cc2:MyUpdatePanel>


    </div>
    </div>
    </asp:Content>
     
    My code VB : 
    Public Partial Class WebForm9
    Inherits CRMPage

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
    loadParentNode()
    End If

    End Sub

    Private Sub
    loadParentNode()
    Dim sql As New DB.MySqlConnection()
    Dim dt As New DataTable
    dt = sql.GetDataTable("Select * from Droits Where idparent is NULL")
    For Each r As DataRow In dt.Rows
    Dim n As New TreeNode()
    n.Value = r("iddroit")
    n.Text = r("libdroit")
    n.PopulateOnDemand = "true"
    n.SelectAction = TreeNodeSelectAction.Expand
    treeDroit.Nodes.Add(n)
    Next
    End Sub

    Private Sub
    treeDroit_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles treeDroit.TreeNodePopulate
    Dim sql As New DB.MySqlConnection()
    Dim dt As New DataTable
    dt = sql.GetDataTable("Select * from Droits where idparent=" & e.Node.Value)
    For Each r As DataRow In dt.Rows
    Dim t As New TreeNodeTemplate()
    t.Value = r("iddroit")
    t.Text = r("libdroit")
    e.Node.ChildNodes.Add(t)
    Next
    End Sub
    End Class
     
    My custom class TreeNodeTemplate :
    Imports Microsoft.VisualBasic
    Imports System.ComponentModel
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    Imports System.Collections.Generic

    Public Class TreeNodeTemplate
    Inherits System.Web.UI.WebControls.TreeNode

    Private linkBtn As New LinkButton()


    End Class 
    Thanks a lot for your futured answers. 
     Jerome.
  • Re: Customize a treeView : adding linkbutton in treeNodes

    01-21-2009, 8:38 PM
    Answer

    Hi Jerome,

    Here is one solution and it is very powerful, please refer it to solve this issure,

    http://forums.asp.net/t/1035578.aspx

    Please try to convert C# to VB with this tool if you are not familiar with C#,

    http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Hong-Gang Chen
    Microsoft Online Community Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
  • Re: Customize a treeView : adding linkbutton in treeNodes

    01-23-2009, 8:33 AM
    • Member
      point Member
    • Dje33510
    • Member since 12-10-2008, 8:26 AM
    • Posts 7

     Hi, i found another answer to my issue. It's to created  2 treeview simple not custom, the first for the labels and the second for the image. There is no imageButton, no custom treenode class it's very simple  it works very good.

     

    Look my  treeview with 2 treeviews :

     

    My code.VB :

     

     Private Sub ddutil_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddutil.SelectedIndexChanged
            RemoveNodes()
            LoadChildNode(Nothing, True, False)
            LoadChildNode(Nothing, True, True)
            MyUpdatePanelGlobal.Update()
        End Sub
      

      

     Private Sub LoadChildNode(ByVal node As TreeNode, ByVal racine As Boolean, ByVal treeImg As Boolean)
    Dim sql As New DB.MySqlConnection()
    Dim dt As New DataTable
    Dim res As Integer = 0
    If racine Then
    dt = sql.GetDataTable("Select * from Matable Where idparent is NULL order by libdroit")
    Else
    dt = sql.GetDataTable("Select * from Matable where idparent=" & node.Value & " order by libdroit")
    End If
    If
    dt.Rows.Count <> 0 Then
    For Each
    r As DataRow In dt.Rows
    Dim t As New TreeNode
    t.Collapse()
    t.Value = r("iddroit")
    t.Text = r("libdroit")
    If treeImg Then
    t.Text = ""
    res = sql.GetCount("crm..Matable ", " idutilisateur='" & ddutil.SelectedItem.Value & "' AND iddroit=" & r("iddroit"))
    If res <> 0 Then
    t.ImageUrl = image_rouge
    Else
    t.ImageUrl = image_vert
    End If
    res = 0
    End If
    t.SelectAction = TreeNodeSelectAction.Select
    If
    racine Then
    If
    treeImg Then
    treeImage.Nodes.Add(t)
    Else
    t.ImageUrl = image_plus
    treeDroit.Nodes.Add(t)
    End If
    Else
    If
    treeImg Then
    node.ChildNodes.Add(t)
    Else
    node.ImageUrl = image_plus
    node.ChildNodes.Add(t)
    End If
    End If

    LoadChildNode(t, False, treeImg) ' enfant d'enfant
    Next
    Else
    If Not
    treeImg Then
    If Me
    .GetIsChildDroitControl(node.Value) Then
    node.ImageUrl = image_trait
    Else
    node.ImageUrl = image_vide
    End If

    End If
    End If
    End Sub
     
      
    Private Sub treeDroit_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles treeDroit.SelectedNodeChanged
    Dim node As TreeNode
    node = treeDroit.SelectedNode
    If node.Expanded And node.ImageUrl = image_moins Then
    node.ImageUrl = image_plus
    treeDroit.SelectedNode.Collapse()
    treeImage.FindNode(node.ValuePath).Collapse()
    ElseIf node.ImageUrl = image_plus Then
    node.ImageUrl = image_moins
    treeDroit.SelectedNode.Expand()
    treeImage.FindNode(node.ValuePath).Expand()
    End If
    treeDroit.SelectedNode.Selected = False
    End Sub
     
      
     Private Sub treeImage_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles treeImage.SelectedNodeChanged
    If treeImage.SelectedNode.ImageUrl = image_vert Then

    EnregDroit(treeImage.SelectedNode.ChildNodes, treeImage.SelectedNode, ddutil.SelectedItem.Value, False)
    SaveInDatabase(treeImage.SelectedNode, ddutil.SelectedItem.Value, False)
    Else
    EnregDroit(treeImage.SelectedNode.ChildNodes, treeImage.SelectedNode, ddutil.SelectedItem.Value, True)
    SaveInDatabase(treeImage.SelectedNode, ddutil.SelectedItem.Value, True)
    End If
    treeImage.SelectedNode.Selected = False
    MyUpdatePanelGlobal.Update()
    End Sub
     
    My aspx code :
      
               <table>
    <tbody>
    <tr>
    <td><asp:TreeView ID="treeDroit" NodeStyle-Font-Bold="true" LeafNodeStyle-Font-Bold="false" ShowExpandCollapse="false" runat="server" EnableClientScript="true" ForeColor="Black" PopulateNodesFromClient="true">
    </asp:TreeView></td>
    <td class="tdImage" ><asp:TreeView ID="treeImage" NodeStyle-Font-Bold="true" NodeIndent="0" ShowExpandCollapse="false" LeafNodeStyle-Font-Bold="false" runat="server" EnableClientScript="true" ForeColor="Black" PopulateNodesFromClient="true">
    </asp:TreeView></td>
    </tr>
    </tbody>
    </table>
               
      Thanks for help, I have posted my solution not optimised i think, it works good and fast but i think for lot of results it's not adapted.
     
    Sorry for my english. 
     
     
     
Page 1 of 1 (3 items)