- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- gestione menu
-
gestione menu
ciao
sono agli inizi della proggramazione in VB.....e ho qualche difficoltà.
Ho progettato un menù dinamico con la struttura ad albero.
Il menu è stato caricato in un database Sql.Prima ho fatto il collegamento database.
Poi ho scritto questo codice in visual basic.```
PublicFunction menu(ByVal testo AsString) As DataSet
Dim da AsNew OleDb.OleDbDataAdapter
Dim ds As DataSet = New DataSet()
Dim dato AsString
Dim testCMDTry
'richiemo una storeprocedure GestioneMenu che mi dice cosa visualizzare del menu
Dim dat1 AsNew OleDb.OleDbCommand("GestioneMenu", objDb)
dat1.CommandType = CommandType.StoredProcedure
Dim RetValue As OleDb.OleDbParameter = testCMD.Parameter.Add("RetValue", OleDb.OleDbType.Numeric)
RetValue.Direction = ParameterDirection.ReturnValue
Dim param1 As OleDb.OleDbParameter = testCMD.Parameters.Add("parametro", OleDb.OleDbType.VarChar, 80)
param1.Direction = ParameterDirection.Input
param1.Value = dato
da.SelectCommand = testCMD' inserisco i dati
da.Fill(ds, "menugenerico")
dt = ds.Tables(0)Catch ex As Exception
'lbl.Message.Text = "Errore nel caricamento menù"
EndTryAdesso vorrei sapere come gestire il menu. Dovrei stampare in asp.net il menù, tenendo presente che i dati mi arrivano in maniera confusa e io devo dividerli in padri e figli. sabry
-
comincia a mettere un repeater (che serve a stampare i dati provenienti dal tuo datatable).
Nell'html:
<asp:Repeater id="miorepeater" runat="server"> <ItemTemplate><%#DataBinder.Eval(Container.DataItem, "tuocampo")%></ItemTemplate> </asp:Repeater>
nel codice in alto
' inserisco i dati da.Fill(ds, "menugenerico") dt = ds.Tables(0) **miorepeater.datasource=dt miorepeater.databind**
Personalizzati il codice con i tuoi campi. Dovresti almeno cominciare a vedere gli item.
Per il padre/figlio è un po più complesso.
-
sono riuscita a fare molti passi avanti dal post.......adesso visualizza benissimo il minù ad albero, ma resta sempre il problema della parte grafica che vorrei cambiare e modificare:
Dalla mia ricerca ho visto che ci sono molte persone in internet che hanno probblemi di i miei stessi probblemi con il menù ad albero.
Ed allora perche non fare di questo post una specie di tutorial per tutti quelli come me che hanno cercato invano in google e non sono riusciti a trovare niente di soddisfacente.Io posto il codice VB funzionante:
PartialPublicClass template Inherits Page Dim temp AsString Dim cont AsInteger ProtectedSub Menu_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load IfNot IsPostBack Then Dim nodo AsNew TreeNode NodoPrincipale(nodo, 1) TreeView1.Nodes.Add(nodo) nodo.Text = "MENU" 'nodo.Target = "" TreeView1.CollapseAll() TreeView1.Nodes(0).Expand() 'MsgBox.Show(Me.lbCodiceOrdine.ID.ToString(), Page) EndIf EndSub PrivateSub NodoPrincipale(ByVal nodo As TreeNode, ByVal codicePadre AsInteger) Try 'definisco il nodo principale della treeview, caricanco le diverse tipologie di magazzini cnGeneral.SelectCommand = "SELECT Collegamento, Titolo,codice,url,TARGET,images FROM MENU Where codicepadre=@CodicePadre ORDER BY Codice" cnGeneral.SelectCommandType = SqlDataSourceCommandType.Text cnGeneral.SelectParameters.Clear() cnGeneral.SelectParameters.Add("CodicePadre", TypeCode.Int32, codicePadre) Dim dw As DataView = cnGeneral.Select(DataSourceSelectArguments.Empty) ForEach rowTipo As DataRow In dw.Table.Rows Dim nodeTipo As System.Web.UI.WebControls.TreeNode = New System.Web.UI.WebControls.TreeNode If IsDBNull((rowTipo("Url"))) Then nodeTipo.NavigateUrl = "" Else nodeTipo.NavigateUrl = rowTipo("Url") EndIf If IsDBNull((rowTipo("TARGET"))) Then nodeTipo.Target = "_self" Else nodeTipo.Target = rowTipo("TARGET") EndIf If IsDBNull((rowTipo("images"))) Then nodeTipo.ImageUrl = "" Else nodeTipo.ImageUrl = rowTipo("images") EndIf nodeTipo.Text = rowTipo("Titolo") If IsDBNull((rowTipo("collegamento"))) Then temp = 0 + rowTipo("codice") Else temp = rowTipo("collegamento") EndIf nodeTipo.Value = temp nodeTipo.ToolTip = rowTipo("codice") nodo.ChildNodes.Add(nodeTipo) IfNot IsDBNull((rowTipo("collegamento"))) Then NodoPrincipale(nodeTipo, temp) EndIf Next Catch ex As Exception 'Utility.ErrorLog(ex.ToString(), Page) EndTry EndSub ProtectedSub TreeView1_SelectedNodeChanged1(ByVal sender AsObject, ByVal e As System.EventArgs) Handles TreeView1.SelectedNodeChanged 'MsgBox.Show(TreeView1.SelectedNode.ToolTip.ToString(), Page) 'TreeView1.SelectedValue.ToString() + " " + 'MsgBox.Show(TreeView1.SelectedNode.Expanded.ToString(), Page) If TreeView1.SelectedNode.Expanded.ToString() = TrueThen TreeView1.SelectedNode.Collapse() Else TreeView1.SelectedNode.Expand() 'TreeView1.Nodes(0).Expand() EndIf EndSub EndClass ```E naturalmente la relativa parte di pagina aspx:
<scriptrunat="server">
ProtectedSub TreeView1_SelectedNodeChanged(ByVal sender AsObject, ByVal e As System.EventArgs)
EndSub
</script><formid="form1"runat="server">
<asp:TreeViewID="TreeView1"runat="server"Height="550px"Width="152px"Font-Size="X-Small"style="font-family: 'Times New Roman', Times, serif;font-size: small"ImageSet="Msdn"NodeIndent="10">
<parentnodestylefont-bold="False"/>
<hovernodestyleBackColor="#CCCCCC"font-underline="True"BorderColor="#888888"BorderStyle="Solid"/>
<selectednodestylebackcolor="green"font-underline="False"horizontalpadding="3px"verticalpadding="1px"BorderColor="#888888"BorderStyle="Solid"BorderWidth="1px"/>
<nodestylefont-names="Verdana"font-size="8pt"forecolor="Black"horizontalpadding="5px"nodespacing="1px"verticalpadding="2px"/>
</asp:TreeView></form>Adesso bisognerebbe modificare la parte grafica ............ il probblema è che per ilmomento mi rendo conto di non esserne ancora capace. Vorrei ottenere un menu simile a quello di questo sito: http://www.unisi.it/disgeg/frame%20sinistro%20finale.htm con l'unica differenza che vorrei che il menu si espandessi con il pasaggio del muose sopra senza cliccare la relativa voce......... Se qualcuno volesse contribuire alla costruzione del menù io ne sarei grata.....ma penso anche molti altri utenti. Se dovessi fare dei progresso li posto qui in modo da completare comunque il tutorial.