Hej, hur skulle denna funktion kunna översättas till .net?
Function Path(cmd, p)
Dim node(4)
Dim nodes
Set rs = Server.CreateObject("ADODB.Recordset")
Set nodes = Server.CreateObject("Scripting.Dictionary")
rs.Open cmd
Do Until rs.EOF
node(0) = rs("pageid")
node(1) = rs("parentpageid")
node(2) = rs("linktext")
node(3) = rs("url")
node(4) = rs("target")
nodes.Add CStr(node(0)), node
p.Value = rs("sp_parent_pageid").Value
rs.Close
rs.Open cmd
Loop
rs.Close
Set Path = nodes
End Function
Jag har börjat här, men jag har fastnat... :)
Private Function path() As StringDictionary
Dim queryString As String = "SELECT pageid, parentpageid, linktext, url, target FROM pages WHERE parentpageid = 0 ORDER BY parentpageid"
Dim node(4) As String
nodes = New StringDictionary()
Dim ds As New DataSet
Dim da As New MySqlDataAdapter
Dim connection As New MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("connectionString").ConnectionString)
command = New MySqlCommand(queryString, connection)
command.CommandText = queryString
da.SelectCommand = command
connection.Open()
da.Fill(ds, "pages")
For Each r As DataRow In ds.Tables("pages").Rows
node(0) = r.Item(0)
node(1) = r.Item(1)
node(2) = r.Item(2)
node(3) = r.Item(3)
node(4) = r.Item(4)
nodes.Add(CStr(r.Item(0)), node.ToString)
'Public Prop PageId as Long
PageId() = r.Item(1)
Next
connection.Close()
Return nodes
End Function
Frågan är lite vad du är ute efter. Den returnerade DataTable:n innehåller ju egentligen det du behöver.
Som ren info så är det i och för sig ingen toppenlösning om man vill ha en ren och effektiv arkitektur, men vad du gör beror ju lite på vad du vill ha.
En bra lösning skulle exempelvis:
-Flytta ut databaskopplingen till ett separat datalager
-Använda en egen klass för sidinformationen (PageInfo) som fylls på av/från datalagret
-Returnera en IDictionary<int,PageInfo> (generisk dictionary med int (pageid är väl int?) som nyckel). IDictionary(Of Integer,PageInfo) i VB.NET
Du har säkert rätt emission. Men jag fattar inte hur jag skall gå vidare, eftersom att jag inte är helt säker på .net's alla funktioner.
Här är en länk till hela menyfunktionen "jag" gjort för länge sedan. http://www.webforum.nu/showthread.php?p=1186636#post1186636
Alltså, det som det hela skall göra är att visa en meny rekursivt samt öppna hela noden vars submenyer är öppna.
[B]Bilar[/B]
Volvo
[B]Saab[/B]
99
[B]95[/B]
Fiat
Båtar
Flygplan
Nägon som har en liten hint...? Jag vet inte i vilken ända jag skall börja.
Funkar det att endast (efter db-anropet) använda Datatablen med select()-utryck kanske?
Det är inte mega-mycket som skall visas kanske max 70 noder då borde det gå att moffa in allt i en datatable som jag väljer ut valda delar ur eller...?
Jag googlade lite på IDictionary utan större framgång.
Det råkar inte vara så att du skulle kunna använda ASP.NETs TreeView-kontroll för ändamålet? Om du dessutom kombinerar det med CSS Adapters, så kan du med CSS-filer styra utseendet så att det inte blir så TreeView-aktigt.