Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


TreeView - hur öka antalet nivåer (depth)?

Postades av 2007-10-09 00:26:48 - Sara Winter, i forum vb.net, Tråden har 4 Kommentarer och lästs av 1583 personer

Hej,
Mysko rubrik kanske, men vad ska man säga?

Det är så att jag har plockat exemplet för hur man skapar en TreeView som är kopplad till en databas från ASP.NET Quickstart Tutorials (http://quickstarts.asp.net/QuickStartv20/util/srcview.aspx?path=~/aspnet/samples/ctrlref/navigation/TreeView/TreeView11.src).
Jag har anpassat den efter mina behov och den fungerar klockrent! (nästan)

Men jag har två problem:

1. Hur får jag bort rootNoden?
Vet att den måste finnas där, men har för mig att jag sett att det går att dölja den, minns bara inte hur..

2. Hur får jag den att gå djupare ner i strukturen? (se exempelkoden ovan så förstår ni kanske hur det ser ut, annars postar jag min kod)
Det är så att jag skapar en TreeView som i princip är en navigeringsmeny.
Förutsättningar:
- Jag har en tabell i databasen som heter TblPages, i den finns bland annat fälten PageID, PageTitle och PageParentID.
- Om PageParentID = 0 så blir det den första nivån, poster där PageParentID är någonting annat (icke nullerbart) är barn till någon av dessa, och "ärver" förälderns PageID i PageParentID fältet.
- Så långt fungerar koden, men om jag skapar ett barn till ett av barnen får den ett PageParentID som inte tillhör nivå ett, utan nivå 2, detta visas inte...

Jag är så srtukturerad och logisk i min beskrivning så ni förstår givetvis vad jag menar ;) men postar ett exempel för säkerhets skull:

Tabellen i databasen:
(PageID | PageTitle | PageParentID)
1 | Sida1 | 0
2 | Sida2 | 0
3 | Sida3 | 1
4 | Sida4 | 2
5 | Sida5 | 3

...ska bli (har inte med rootNoden):
Sida1
- Sida3
- - Sida5
Sida2
- Sida4

...men jag får bara ut (har fortfarande inte med rootNoden):
Sida1
- Sida3
Sida2
- Sida4

Som jag har löst det kallar jag på nivå1 noderna genom en Procedur som kallar alla poster där PageParentID = 0.
Barnen kallar jag genom en Procedur som kallar alla poster där PageParentID = @PageID, där PageID är idt på förälder-sidan.

Som sagt, det fungerar i första nivån, men när jag vill kalla på den för att göra samma sak med barn till barn fungerar det inte. Borde jag inte kunna återanvända den till det???

Hoppas någon förstår vad jag snackar om. Klockan är för mycket för att jag ska kunna avgöra om jag är tydlig eller om det låter som rappakalja...

Alla som läser ska ha tack, de som dessutom svarar; tusen tack :)


Svara

Sv: TreeView - hur öka antalet nivåer (depth)?

Postades av 2007-10-09 08:24:26 - Sara Winter

Okej, postar koden...

aspx-sidan med TreeView-taggen:

<asp:TreeView runat="server" ID="TreeMenu1" OnTreeNodePopulate="PopulateNode" ExpandDepth="1" NodeIndent="10" >
	<Nodes>
		<asp:TreeNode Text="Pages" SelectAction="expand" PopulateOnDemand="true"></asp:TreeNode>
	</Nodes>
</asp:TreeView>


code-behind:
Partial Class Admin_MenuControls_menuUC
    Inherits System.Web.UI.UserControl

	Sub GetRootPages(ByVal node as TreeNode)
		Dim rootPages as RootPageList = TreeMenu.GetRootPages()
		Dim p as RootPage
		for each p in rootPages
			Dim newNode as TreeNode = new TreeNode(p.Title, p.Id)
			newNode.SelectAction = TreeNodeSelectAction.Expand
			newNode.PopulateOnDemand = True
			node.ChildNodes.Add(newNode)
		Next
	End Sub

	Sub GetChildPages(ByVal node As TreeNode)
		Dim pageID as String = node.Value
		Dim childPages As ChildPageList = TreeMenu.GetChildPages(pageID)
		Dim p as ChildPage
		for each p in childPages
			Dim newNode as TreeNode = New TreeNode(p.Title, p.Id)
			node.ChildNodes.Add(newNode)
		Next
	End Sub

	Sub PopulateNode(ByVal source As Object, ByVal e as TreeNodeEventArgs)
		select case e.Node.Depth
			case 0
				GetRootPages(e.Node)
			case 1
				GetChildPages(e.Node)
		End Select
	End Sub

End Class


class-filen:
Imports System
Imports System.Data
Imports System.Collections
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.Web.UI
Imports System.Web.UI.WebControls

Public Class TreeMenu

	Public Shared Function GetRootPages() As RootPageList
		Dim rootPages as New RootPageList
		Dim connStr As String = ConfigurationManager.ConnectionStrings("SomDBConnectionString").ConnectionString
		Dim mySource as SqlDataSource = new SqlDataSource(connStr, "GetRootPages")
		mySource.SelectCommandType = SqlDataSourceCommandType.StoredProcedure
		Dim result as IEnumerable = mySource.Select(DataSourceSelectArguments.Empty)
		
		dim row As DataRowView
		for each row in result
			rootPages.Add(New RootPage(row("PageID").ToString(), row("PageTitle").ToString()))
		Next
		return rootPages
	End Function

	Public Shared Function GetChildPages(pageID as String) As ChildPageList
		Dim childPages as New ChildPageList
		Dim connStr As String = ConfigurationManager.ConnectionStrings("SomDBConnectionString").ConnectionString
		Dim mySource as SqlDataSource = new SqlDataSource(connStr, "GetChildPages")
		mySource.SelectCommandType = SqlDataSourceCommandType.StoredProcedure
		mySource.SelectParameters.Add(New Parameter("PageID", TypeCode.Int32, pageID))
		Dim result as IEnumerable = mySource.Select(DataSourceSelectArguments.Empty)
		
		dim row As DataRowView
		for each row in result
			childPages.Add(New ChildPage(row("PageID").ToString(), row("PageTitle").ToString()))
		Next
		return childPages
	End Function
	
End Class

Public Class RootPage
	Public Id as String
	Public Title as String
	Public sub New (ByVal id as String, ByVal title as String)
		me.Id = id
		me.Title = title
	End Sub
End Class

Public class RootPageList
	Inherits ArrayList
	Default Public Shadows Property DefaultProperty(i As Integer) as RootPage
		Get
			Return CType(MyBase.Item(i), RootPage)
		End Get
		Set(ByVal value As RootPage)
			MyBase.Item(i) = value
		End Set
	End Property
End Class

Public class ChildPage
	Public Id as String
	Public Title as String
	Public sub New (ByVal id as String, ByVal title as String)
		me.Id = id
		me.Title = title
	End Sub
End Class

Public class ChildPageList
	Inherits ArrayList
	Default Public Shadows Property DefaultProperty(i As Integer) as ChildPage
		Get
			Return CType(MyBase.Item(i), ChildPage)
		End Get
		Set(ByVal value As ChildPage)
			MyBase.Item(i) = value
		End Set
	End Property
End Class


Det är GetChildPages() som jag vill återanvända genom att kalla på den när depthen blir djupare...
Typ:
<code>
Sub PopulateNode(ByVal source As Object, ByVal e as TreeNodeEventArgs)
select case e.Node.Depth
case 0
GetRootPages(e.Node)
case 1
GetChildPages(e.Node)
case 2
GetChildPages(e.Node)
case 3
GetChildPages(e.Node)
case 4
GetChildPages(e.Node)
End Select
End Sub
</code>

Vet inte om jag tänker helt fel, men det fungerar uppenbarligen inte :/


Svara

Sv:TreeView - hur öka antalet nivåer (depth)?

Postades av 2007-10-09 08:41:39 - Sara Winter

Jag har löst det :D

Tänkte helt rätt, hade bara inte sett att koden i GetChildPages() var satt till att expandera trädet...
(Det blev lite mer överskådligt när jag postade det här)

Så här ska det se ut i code-behind:
<code>
Sub GetChildPages(ByVal node As TreeNode)
Dim pageID as String = node.Value
Dim childPages As ChildPageList = TreeMenu.GetChildPages(pageID)
Dim p as ChildPage
for each p in childPages
Dim newNode as TreeNode = New TreeNode(p.Title, p.Id)
newNode.SelectAction = TreeNodeSelectAction.Expand
newNode.PopulateOnDemand = True
node.ChildNodes.Add(newNode)
Next
End Sub
</code>

Fungerar finfint :)

Men nu finns det här som referens till andra som vill göra samma sak. Bara att plocka koden!

Måste dock försöka anpassa så att select case satsen blir dynamisk och inte begränsar djupet på trädet...


Svara

Sv: TreeView - hur öka antalet nivåer (depth)?

Postades av 2007-10-09 08:46:04 - Sara Winter

...men vill fortfarande gärna ha tips om hur jag får bort rootNoden...


Svara

Sv:TreeView - hur öka antalet nivåer (depth)?

Postades av 2008-01-23 14:14:17 - Kristian Brangö

Hej !

Vet inte om du löst detta?

showstartingnode="False"


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 726
27 958
271 751
383
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies