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.