58 messaggi dal 11 maggio 2002
Ripropongo la questione nella speranza.....
Dunque riempo un array con i dati della query poi voglio crearmi una stringa formattata per un menu javascript e la registro con il metodo
Page.RegisterStartupScript .
Ad un certo punto della variabile strscript ci sta un ciclo For ora il problema è che i dati li estrae ma ripete sempre la riga numero 1 della query cioè non scende alle altre categorie qualcuno mi sa illuminare?? dove la cosa è sbagliata?? come inserisco il ciclo in modo che fa pure scorrere l'array sempre con la formattazione giusta???



Sub Menujavascript()
Dim arraycategorie() As String
Dim dsmenu As DataSet
Dim MyCommand As SqlDataAdapter 'cambiare aanche sotto in mycommand = sqldataAdapter
Dim MyConnection As SqlConnection
Dim quanti As Integer

MyConnection = New SqlConnection(Application("sqlConnection"))

MyConnection.Open()


MyCommand = New SqlDataAdapter("SELECT DISTINCT CtPrd.Categoria,CtPrd.Descri " & _
"FROM CtPrd " & _
"order by CtPrd.Descri", MyConnection)

dsmenu = New DataSet
MyCommand.Fill(dsmenu, "Articoli")


ReDim arraycategorie(dsmenu.Tables(0).Rows.Count)
For intCounter As Integer = 0 To dsmenu.Tables(0).Rows.Count - 1
arraycategorie(intCounter) = dsmenu.Tables(0).Rows(intCounter).Item(1).ToString
Next
MyConnection.Close()


Dim strScript As String

strScript = "<script language=JavaScript>" + Environment.NewLine
strScript += "var menuItems = [' & _" + Environment.NewLine
strScript += "['Scegli un Brand','','img/new1-05.gif','img/new1-05.gif', , '_blank', , , , , , ]," + Environment.NewLine
For intCount As Integer = 0 To dsmenu.Tables(0).Rows.Count - 1
strScript += "['" + arraycategorie(1) + "','','','','','_blank']," + Environment.NewLine
Next
strScript += "dm_init();" + Environment.NewLine
strScript += "</script>"

If (Not Page.IsStartupScriptRegistered("clientScript")) Then
Page.RegisterStartupScript("clientScript", strScript)
End If

End Sub
ASTROTEK wrote:
Ripropongo la questione nella speranza.....

a prescindere dal perchè non funzioni, questo codice è ridondante. copi i dati in una DataTable, cioè un contenitore generico di dati, poi li copi in un array di stringhe, poi ne crei una con contenazione.
anche se non te ne accorgi, i cicli consumano cicli di CPU (e tutte quelle variabili memoria).
sostituisci tutto con un bel DataReader ed uno StringBuilder, avrai codice che funziona più velocemente e che sarà anche più ordinato.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
58 messaggi dal 11 maggio 2002
Ho scritto il codice con le classi come dicevi tu Daniele e funziona alla grande pero il vero intoppo nasce per me ora il menu è a tre livelli la stringa javascript ne incollo un pezzo statico scritto a mano è la seguente (si puo' notare come sotto ogni famiglia che già estraggo ci sia la sottofamiglia e poi i marchi con i link:

["ALIMENTATORI","","","","","_blank"],
["|ALIMENTATORI PER CASE","","img/b011.gif","img/b01.gif","Product 1 Tip"],
["||Tutti i prodotti","Componenti.aspx?sottofamiglia=ALIMENTATORI&famiglia=ALIMENTATORI PER CASE&marca=Tutti i prodotti","img/b061.gif","img/b06.gif"],
["||NOBRAND-VARI","Componenti.aspx?sottofamiglia=ALIMENTATORI&famiglia=ALIMENTATORI PER CASE&marca=NOBRAND-VARI","img/b061.gif","img/b06.gif"],
["||TECNOWARE","Componenti.aspx?sottofamiglia=ALIMENTATORI&famiglia=ALIMENTATORI PER CASE&marca=TECNOWARE","img/b061.gif","img/b06.gif"],
["BOX ESTERNI","","","","","_blank"],
["|BOX ESTERNI CD/DVD 5,25","","img/b011.gif","img/b01.gif","Product 1 Tip"],
["||Tutti i prodotti","Componenti.aspx?sottofamiglia=BOX ESTERNI&famiglia=BOX ESTERNI CD/DVD 5,25&marca=Tutti i prodotti","img/b061.gif","img/b06.gif"],
["||POWER-PC","Componenti.aspx?sottofamiglia=BOX ESTERNI&famiglia=BOX ESTERNI CD/DVD 5,25&marca=POWER-PC","img/b061.gif","img/b06.gif"],
["|BOX ESTERNI HDD 2,5","","img/b011.gif","img/b01.gif","Product 1 Tip"],
["||Tutti i prodotti","Componenti.aspx?sottofamiglia=BOX ESTERNI&famiglia=BOX ESTERNI HDD 2,5&marca=Tutti i prodotti","img/b061.gif","img/b06.gif"],
["||POWER-PC","Componenti.aspx?sottofamiglia=BOX ESTERNI&famiglia=BOX ESTERNI HDD 2,5&marca=POWER-PC","img/b061.gif","img/b06.gif"],
["|BOX ESTERNI HDD 3,5","","img/b011.gif","img/b01.gif","Product 1 Tip"],
["||Tutti i prodotti","Componenti.aspx?sottofamiglia=BOX ESTERNI&famiglia=BOX ESTERNI HDD 3,5&marca=Tutti i prodotti","img/b061.gif","img/b06.gif"],
["||POWER-PC","Componenti.aspx?sottofamiglia=BOX ESTERNI&famiglia=BOX ESTERNI HDD 3,5&marca=POWER-PC","img/b061.gif","img/b06.gif"],

Con questo codice sto provando a farlo ma nel ciclo non riesco a dirgli estraimi la sottocategoria relativa alla categoria e poi continua....ho messo il ciclo sotto evidenziato ma non riesco....
Grazie

Sub MenuJavascript_new()

Dim conn As SqlConnection
conn = New SqlConnection(Application("sqlConnection"))

Dim cmd As SqlCommand
cmd = New SqlCommand("SELECT CT.Descri AS FAMIGLIA,ST.Descri AS SOTTOFAMIGLIA,PR.RagSoc AS MARCA from Articoli ART " & _
"INNER JOIN CtPrdSt ST ON ART.SotCatProd=ST.SottoCtPrd " & _
"INNER JOIN Produtt PR ON ART.Produttore=PR.Produtt " & _
"INNER JOIN CtPrd CT ON ART.CatProd=CT.Categoria " & _
"group by ART.Sotcatprod,PR.RagSoc,ST.Descri,CT.Descri order by PR.RagSoc", conn)
' PRIMO DATA READER
Dim reader As SqlDataReader
conn.Open()
reader = cmd.ExecuteReader()


Dim Categoria As Int32 = reader.GetOrdinal("FAMIGLIA")
Dim SottoCategoria As Int32 = reader.GetOrdinal("SOTTOFAMIGLIA")


Dim strBuilder As StringBuilder = New StringBuilder
strBuilder.Append("<script language=JavaScript>" + Environment.NewLine)
strBuilder.Append("var menuItems = [' & _" + Environment.NewLine)
strBuilder.Append("['Scegli un Brand','','img/new1-05.gif','img/new1-05.gif', , '_blank', , , , , , ]," + Environment.NewLine)
While (reader.Read())
strBuilder.Append("['" + reader.GetString(Categoria) + "','','','','','_blank']," + Environment.NewLine)
While (????? condizione NON RIESCO!!
strBuilder.Append("['|" + reader.GetString(SottoCategoria) + "','','img/b011.gif','img/b01.gif','Product 1 Tip']," + Environment.NewLine)
End While
End While
strBuilder.Append("dm_init();" + Environment.NewLine)
strBuilder.Append("</script>")

'output.Text = strBuilder.ToString()

If (Not Page.IsStartupScriptRegistered("clientScript")) Then
Page.RegisterStartupScript("clientScript", strBuilder.ToString)
End If

reader.Close()
conn.Close()

End Sub







ASTROTEK wrote:
Con questo codice sto provando a farlo ma nel ciclo non riesco a dirgli estraimi la sottocategoria relativa alla categoria e poi continua....ho messo il ciclo sotto evidenziato ma non riesco....

devi cambiare la query in modo tale che estragga un campo (anche calcolato) che chiami ad esempio ParentID, che è in pratica l'ID della catagoria, e SortLevel, che indichi a che "profondità" si trova nell'albero. a quel punto ordini per ParentID e Level ed hai il tuo menu ordinato compreso di sottocategorie.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
58 messaggi dal 11 maggio 2002
Aspetta pero come è ora la mia query comunque mi ripeterebbe la famiglia tante volte quante sottofamiglie ci sono
invece io devo ottenere un qualcosa tipo
eS.

ACCESSORI
|ACC. PC
|ACC. NOTEBOOK
|ACC. SERVER
BORSE
| BORSE PELLE
| BORSE CUOIO

invece con il ciclo non nidificato ottengo

ACCESSORI
|ACC. PC
ACCESSORI
|ACC. NOTEBOOK

cioè mi ripete sempre la Famiglia
ASTROTEK wrote:
cioè mi ripete sempre la Famiglia

perchè hai scritto male la query, ma questa cosa la puoi sistemare soltanto tu, dato che conosci la struttura del db e... ti pagano per farlo  arrivare al primo albero non è difficile, si tratta, appunto, di riscrivere in maniera coerente la query (meglio ancora usare una SP, dove puoi anche avere tabelle temporanee).

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.