Treeview e xmldatasource

lunedì 16 giugno 2008 - 16.15

Giovanni_3478 Profilo | Senior Member

Ciao

[C#,treeview, xmldatasource]

Voglio popolare un treeview con un file xml.

Ho preso questo esempio dalla msdn

<?xml version="1.0" encoding="utf-8" ?> <People> <Person> <Name> <FirstName>Manoj</FirstName> <LastName>Syamala</LastName> </Name> <Address> <Street>345 Maple St.</Street> <City>Redmond</City> <Region>WA</Region> <ZipCode>01434</ZipCode> </Address> <Job> <Title>CEO</Title> <Description>Develops company strategies.</Description> </Job> </Person> </People>

Il problema è il seguente:
il nodo "Name" lo voglio invece chiamare "nome di".
Se scrivo "nome di" me lo considera attributo.

Come posso fare?

Mikyct86 Profilo | Junior Member

Ciao,
Io ho creato tempo fa questa funzione IN VB.NET che da una stored pocedure dove c'erano sport e manifestazioni
creava un nodo padre per lo sport e un nodo figlio per ogni manifestazione.
Vedi se ti puo essere di aiuto!


Try
Dim dtaEventType As DataTable = DataInterface.DBEventType.cp_PSQF_GetManifestazioniAndDisciplina()

'VARIABiLI
Dim dr As DataRow
Dim dr2 As DataRow
Dim sportName As String
Dim ManName As String
Dim man As Integer
Dim disc As Integer
Dim discTemp As Integer
Dim i As Integer = 0
Dim writer As XmlTextWriter
writer = New XmlTextWriter("C:\Inetpub\xmlEvent.xml", Encoding.Default)
' aggiungo l'intestazione XML
writer.WriteStartDocument()
'deve essere con una formattazione indentata
writer.Formatting = Formatting.Indented
'sports root PRINCIPALE
writer.WriteStartElement("sports")
'itero la tabella

For Each dr In dtaEventType.Rows
disc = dtaEventType.Rows.Item(i).Item(2)
man = dtaEventType.Rows.Item(i).Item(3)
sportName = dtaEventType.Rows.Item(i).Item(0)
'sport in maiuscolo
sportName = sportName.ToUpper()
ManName = dtaEventType.Rows.Item(i).Item(1)
ManName = GetEventTextAbbreviation(ManName)
'ManName = ManName.ToUpper()
'se non è il primo
If i > 0 Then
'il precedente
discTemp = dtaEventType.Rows.Item(i - 1).Item(2)
Else
'se è il primo
writer.WriteStartElement("sport")
writer.WriteAttributeString("name", sportName)
writer.WriteAttributeString("value", disc)
writer.WriteStartElement("manifestazione")
writer.WriteAttributeString("name", ManName)
writer.WriteAttributeString("value", man)
writer.WriteEndElement()
discTemp = disc
End If
'se è diverso dal precedente disciplina ne creo un nodo nuovo
If i > 0 Then
If discTemp <> disc Then
'chiudo lo sport
writer.WriteEndElement()
'ne creo uno nuovo
writer.WriteStartElement("sport")
writer.WriteAttributeString("name", sportName)
writer.WriteAttributeString("value", disc)
writer.WriteStartElement("manifestazione")
writer.WriteAttributeString("name", ManName)
writer.WriteAttributeString("value", man)
writer.WriteEndElement()
discTemp = disc
Else
writer.WriteStartElement("manifestazione")
writer.WriteAttributeString("name", ManName)
writer.WriteAttributeString("value", man)
writer.WriteEndElement()
End If
End If
'scrivi
writer.Flush()
i += 1
Next
writer.WriteEndElement()
'fine sport
writer.Flush()
writer.WriteEndDocument()
writer.Close()
dtaEventType = Nothing
dr = Nothing
Catch ex As Exception

End Try
Questo il risultato:

<?xml version="1.0" encoding="Windows-1252"?>
<sports>
<sport name="CALCIO" value="1">
<manifestazione name="Mondiali Calcio" value="518" />
<manifestazione name="Campionati Europei" value="537" />
<manifestazione name="Campionato Brasile" value="551" />
<manifestazione name="Campionato Finlandes" value="576" />
<manifestazione name="Campion. Calcio Usa" value="689" />
<manifestazione name="Indirette Calcio" value="832" />
<manifestazione name="Qualificazioni Mondi" value="1566" />
</sport>
<sport name="BASKET" value="2">
<manifestazione name="Nba" value="1153" />
<manifestazione name="Campionato Francese " value="1532" />
<manifestazione name="Campionato Tedesco" value="1549" />
<manifestazione name="Serie A1 Play Off" value="1559" />
</sport>
<sport name="TENNIS" value="3">
<manifestazione name="Torneo Di Halle" value="1203" />
<manifestazione name="Torneo Del Queen's" value="1233" />
<manifestazione name="Torneo Di Varsavia" value="1287" />
<manifestazione name="Torneo Di Wimbledon" value="1292" />
</sport>
<sport name="AUTOMOBILISMO" value="7">
<manifestazione name="Mondiali Di Rally" value="1322" />
</sport>
<sport name="MOTOCICLISMO" value="8">
<manifestazione name="Mondiale Superbike" value="1326" />
</sport>
<sport name="GOLF" value="20">
<manifestazione name="Pga Tour" value="1449" />
</sport>
<sport name="BASEBALL" value="45">
<manifestazione name="Major League Basebal" value="1468" />
<manifestazione name="Baseball Italia" value="1555" />
</sport>
</sports>

Giovanni_3478 Profilo | Senior Member

Ciao
Intanto grazie per l'aiuto

Mi interesserebbe vedere il codice del treeview.


Mikyct86 Profilo | Junior Member

Se mi dici cosa vuoi vedere in particolare è un po meglio!
Perche il codice è abbastanza lungo.
Questo lo utilizzo per inizializzare l'xml creato.

Public Sub initXmlDataSource()
XmlDataSource1.DataFile = "C:\Inetpub\xmlEvent.xml"
XmlDataSource1.XPath = "//sport"
XmlDataSource1.DataBind()
end sub

Giovanni_3478 Profilo | Senior Member

Cosa voglio fare:
nel db ho una tabella "Table1" con
con questi campi:
id, nome_categoria, id_categoriaParent
(voglio creare delle categorie per un blog)

da codice ho fatto una connessione al db e ho creato un file xml che appare così:
<?xml version='1.0' encoding='utf-8' ?>
<Root Title="Root">
<node1 Title="mare">
<node2 Title="Palinuro">
<node3 Title="grotte"></node3>
</node2>
<node2 Title="costiera"></node2>
<node2 Title="bahamas"></node2>
<node2 Title="sicilia"></node2>
</node1>
<node1 Title="montagna">
<node2 Title="roccaraso"></node2>
<node2 Title="monteBianco"></node2>
<node2 Title="campitello matese"></node2>
</node1>
<node1 Title="Claudia">
<node2 Title="Parigi"></node2>
<node2 Title="Ponte Milvio"></node2>
<node2 Title="In Africa"></node2>
</node1>
<node1 Title="lavoro">
<node2 Title="mattonelle"></node2>
<node2 Title="pannelli solari"></node2>
<node2 Title="camini"></node2>
</node1>
</Root>

nella page ho inserito:
<asp:TreeView ID="AlberoCategorie" runat="server" EnableLines="true" ShowLines="true"
ShowExpandCollapse="true" ExpandDepth="5" MaxDataBindDepth="5" DataSourceID="XmlDataSource1">
<DataBindings>
<asp:TreeNodeBinding DataMember="Node1" TextField="Title" SelectAction="Select" />
<asp:TreeNodeBinding DataMember="Node2" TextField="Title" SelectAction="Select" />
<asp:TreeNodeBinding DataMember="Node3" TextField="Title" SelectAction="Select" />
</DataBindings>
</asp:TreeView>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/blogCategorie2.xml">
</asp:XmlDataSource>

Il problema è questo adesso:
nel treeview visualizzo anche il nodo "Root" che a me non serve.
Come posso fare per eliminarlo ?

Se non sono stato chiaro dimmelo

Mikyct86 Profilo | Junior Member

Ciao,
devi semplicemente settare l'xpath!
come il seguente:
XmlDataSource1.XPath = "//root"

Giovanni_3478 Profilo | Senior Member

Ho provato ad inserire nel xmldatasource XPath="//Root"
ma root ancora lo visualizzo

Mikyct86 Profilo | Junior Member

allora prova a rinominare tutti i
Node1 node2 e node3 in NODE
e fai l'XPATH su NODE

Giovanni_3478 Profilo | Senior Member

XPath="//node1" funziona

Grazie mille per l'aiuto

Giovanni_3478 Profilo | Senior Member

Riprendo questo post

Nella creazione del file xml viene una cosa del genere
<node1 Title="lavoro" Url="~/1siteContent/Def2.aspx?idCat=4&nomeCat=lavoro">

Se provi a scrivere in un file xml questo codice ti dà errore.
Non accetta in pratica la e commerciale.

C'è un modo per superare questo inconveniente?

Mikyct86 Profilo | Junior Member

Ciao,
Devi usare i caratteri unicode
Basta inserirlo cosi:

<node1 Title="lavoro" Url="~/1siteContent/Def2.aspx?idCat=4&#38;nomeCat=lavoro">

Giovanni_3478 Profilo | Senior Member

funziona grazie

Mikyct86 Profilo | Junior Member

Prego!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5