07. marts 2008 - 23:45Der er
6 kommentarer og 2 løsninger
problem med TreeView og dens SelectedNode efter en opdatering
Hej. Jeg har et TreeView der driller mig.
Jeg har det hersens Treeview jeg har en masse ting i. jeg har så et stykke kode der tilføjer en ny treenode. Når det er sket får jeg den til at opdatere træet ved at TreeView.Nodes.Clear(); men så vil jeg gerne have den til at genvælge den node der var valgt inden jeg lavede den clear()
jeg har prøvet med TreeNode tempNode = TreeView.SelectedNode; lige før jeg laver den der Clear(), og så efter jeg har fyldt TreeView'et igen bruger jeg en TreeView.SelectedNode = tempNode;
men der sker intet. den vælger slet ikke noget eller også bliver den første node i hele TreeViewet valgt.
Nej, for den gamle node holder helt op med at eksistere når du kalder clear. Den findes derform ikke i den nye version af dit treeview. Du må finde en anden måde at genkende noden på. F.eks. ud fra hvad der står i den - hvis det altså er unikt nok.
Det er også hvad jeg tænkte, men hvis jeg pauser med et breakpoint ved 'TreeView.SelectedNode = tempNode;' linien, så kan jeg se at tempNode faktisk indeholder den node jeg er intereseret i. tempnode har dog mistet sin FullPath. Er der ikke en anden måde at vælge en node i treeviewet end ved at bruge SelectNode ?
Ja, tempNode holder stadig fast en reference til noden ... men den eksistere ikke mere i dit TreeView efter Clear(). Her er der til gengæld en node som måske nok "ligner" men som *ikke* er den samme.
Jeg har prøvet at lave en TreeNode testNode = (TreeNode)TreeView.SelectedNode.Clone(); men den testNode indeholder åbenbart ikke nok til at kunne bruges når TreeView.SelectedNode skal sættes igen.
Jeg har sågar prøvet at: (det gamle treeview kalder jeg her bare for TreeviewA)
TreeView TreeViewB = new TreeView(); foreach(TreeNode tempNode in TreeViewA.Nodes) TreeViewB.Nodes.Add((TreeNode)tempNode.Clone()); TreeViewB.SelectedNode = TreeViewA.SelectedNode;
(har også prøvet at bruge TreeViewB.SelectedNode = (TreeNode)TreeViewA.SelectedNode.Clone(); istedet for ovenstående linie)
Altså lave et helt nyt TreeView og clone alle nodes'ne over i det nye treeview fra det gamle, og så sætte det TreeviewB.SelectedNode til treeViewA.selectedNode. og det virker heller ikke. TreeViewB.SelectedNode forbliver Null.
Det lader til at et Treeview's SelectedNode Kun kan benyttes hvis man sætter den til at være lig med en Treenode den fra den SELV. Ikke fra nogle andre steder, ikke engang fra et andet TreeView der indeholder precis de samme Nodes.
Hvorfor skal det være så svært at vælge en node via kode...
så gemte jeg bare den valgte Treenode's fullpath og text inden jeg kørte den clear() og kaldte min søgefunktion bagefter.
Du fik ikke helt løst problemet nielle, men du bragte mig i den rigtige retning. Smid et svar og du får halvdelen af point'sne (hvis man stadig kan det)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.