webForumDet fria alternativet

TreeView - inläsning...

.NET

4 svar · 289 visningar · startad av Brian

Medlem sedan sep. 2001502 inlägg
Frågan#1

Hejsan!

Arbetar med att läsa in struktur i en TreeView. De "mappar" som ligger i roten går bra att läsa in, men det blir värre när man kommer ned en nivå i hiearkin.

När jag bygger strukturen så utgår jag från filernas sökvägar. Exempelvis "Temp\Viktigt\dokument\brev.txt". Då tar jag ut mapparna med kommandot split, så att resultatet i detta fall skulle bli "Temp", "Viktigt" och "Dokument".

Hur lägger jag upp en sådan struktur i en TreeView, om strukturen exempelvis ser ut enligt ned:

Temp\Arbete\tider.txt
Temp\Arbete\kalender.dat
Temp\Viktigt\dokument\brev.txt
Temp\Viktigt\dokument\brev2.txt
Temp\Viktigt\adresser\adress1.txt
Temp\Viktigt\adresser\adress2.txt
Temp\Viktigt\Temp\tillfalligt.txt

Har försökt ge varje mapp i strukturen den del av sökvägen som den är. Exempelvis skulle mappen arbete "Temp" få det unika namnet "Temp" eftersom ingen annan kan ha det namnet.

Mappen "Viktigt" som sin tur ligger under mappen "Temp" skulle då få det unika namnet "Temp\Viktigt".

Men hur kontrollerar jag exempelvis om det redan finns en mapp med namnet "Temp" eller inte, så att jag vet om jag ska skapa en mapp med det namnet, eller om jag ska placera en "child" på befintlig mapp?

Skulle bli oerhört glad för om någon kunde förklara upplägget och hur man bör tänka, när man ska placerar mappar och filer i en TreeView, så att man får rätt struktur på upplägget, och så att trädet snabbt går att ladda utan onödiga kontroller och inläsningar.

Mvh,
Brian

Medlem sedan maj 20018 027 inlägg
#2

Nu sitter jag inte vid en dator med Visual Studio-dokumentation, så det blir inte detaljerat, utan bara principerna. Kolla in FileSystemObject (har för mig du måste lägga till någon referens i projektet för att kunna använda den). Med FileSystemObject kan du skapa objekt som representerar mappar, filer etc. Du kan med lätthet traversera igenom ett helt filträd genom rekursiva funktioner som går igenom collections av mappar respektive filer. Hittas en mapp, anropar funktionen sig själv och går igenom alla filer och mappar som finns i den. Om du samtidigt i denna traversering, skapar motsvarande noder i din TreeView, då vet du alltid att du redan befinner dig vid rätt nod. Se till att skicka en referens till den aktuella TreeView-noden till din rekursiva funktion.

Problemet med att noden "Temp" redan finns, uppstår inte därför att du vet att varje fil du hämtar upp i den katalogen, helt enkelt ska kopplas till den föräldranod som för tillfället är aktiv.

En sak angående TreeView, förmodligen kan du koppla filesystemobjects till nodernas "Tag". Man kan koppla objekt dit i alla fall. Då får du en TreeView-struktur som i sig själv innehåller filerna och mapparna i katalogträdet.

Split kan du strunta i. Filsystemobjekten kan ge dig filnamnet utan hela sökvägen om du vill.

Medlem sedan sep. 2001502 inlägg
#3

Inlägget redigerat och omstrukturerat 2002-05-01 kl. 17:19

Tack för tipset, UlfT!

Är dock inte säker på att det fungerar med FileSystemObject utifrån de förutsättningar jag har. Men jag ska försöka.

Jag anropar en notes-server från en VB-applikation. Från servern hämtar jag sedan sökvägen till filerna i notes-strukturen. Detta gör jag med hjälp av COM och kommandot "getdbdirectory". Kommandot loopar igenom notes-servern och hämtar sökvägen till alla de notesdatabaser som jag har behörighet till.

Min VB-kod ser ut enligt nedan:

Dim s As New NotesSession
Dim dir As NotesDbDirectory
Dim db As NotesDatabase
Dim sokvag as string

s.Initialize
Set dir = s.GetDbDirectory("Servernamnet_på_notesservern")
Set db = dir.GetFirstDatabase(NOTES_DATABASE)
While Not (db Is Nothing)
  
    sokvag=db.FilePath 

    Set db = dir.GetNextDatabase
Wend

Strängen "sokvag" får värdet som motsvarar sökvägen till notesdatabasen. Exempelvis kan värdet vara "Notes\Arbetsgrupper\Lokala\anslag12.nsf". Detta värde vill jag placera i en TreeView, så att det får en nivå och struktur som motsvarar värdet i strängen.
Nästa värde som placeras i strängen "sokvag" kan vara "Notes\Arbetsgrupper\Privata\anslag353.nsf". Då ska även detta värde läggas in i TreeView så att det passar med övrig trädstruktur. Så upprepas till loopen gått igenom samtliga databaser på servern, och placerat ut deras sökvägar i trädet.
Så att man då har en TreeView som har en struktur som motsvarar den på notes-servern.

Mvh,
Brian

Medlem sedan sep. 2001502 inlägg
#4

Hoppas att ni inte glömt denna fråga ;)

Då UltT:s lösningsförslag inte fungereade i detta sammanhang, skulle jag bli glad för ytterliggare tips på upplägget.

Mvh,
Brian

Medlem sedan sep. 2001502 inlägg
#5

:(

262 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)