Hej! Hej Stefan!UserSettings klass
Mitt allra första inlägg =) Yihaj!
Har ett litet problem jag hoppas ni kan hjälpa mig med. Jag har redan postat samma fråga på 'Extreme Visual Basic Talk', men där är det svårt att få svar, så nu hoppas jag hjälpen finns närmre!
Jag har utvecklat ett program som används för tidsplanering, tidsrapportering och kostnadsuppföljning.
Systemet är i drift sedan juni, och fungerar bra, men nu är en uppdatering på gång.
Hela programmet är skrivet i VB.net med SQL Server 2000 som databashanterare. Antalet användare är ca 30.
Bla bla bla... nu till frågan:
Alla användarinställningar sparas som XML data till ett binärt fält i en tabell som heter 'UserProfile'.
XML datan genereras genom att serialisera ett objekt av en klass som heter 'UserSettings'.
Hittils har jag bara behövt spara enkla data som integers, strings, arraylists och liknande, men allt eftersom programmet växer har det uppkommit ett behov att spara mer "komplex" data.
Användaren ska kunna klicka i rutor för att välja de projekttyper han/hon vill ska vara synliga då han/hon bläddrar mellan de olika avdelningarna som finns.
Ett exempel:
För avdelning x, med DivisionID=1 ska projekttyper med ProjectTypeID=1, ProjectTypeID=6, ProjectTypeID=2 och ProjectTypeID=7 visas.
För avdelning y, med DivisionID=2 ska projekttyper med ProjectTypeID=10 och ProjectTypeID=9 visas.
För avdelning z, med DivisionID=7 ska projekttyper med ProjectTypeID=2, ProjectTypeID=8 och ProjectTypeID=11 visas.
XML datan ska alltså se ut liknande:
<?xml version="1.0" encoding="utf-8"?>
<UserSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DivisionProjectType>
<Division ID="1">
<anyType xsi:type="xsd:string">1</anyType>
<anyType xsi:type="xsd:string">6</anyType>
<anyType xsi:type="xsd:string">2</anyType>
<anyType xsi:type="xsd:string">7</anyType>
</Division>
<Division ID="2">
<anyType xsi:type="xsd:string">10</anyType>
<anyType xsi:type="xsd:string">9</anyType>
</Division>
<Division ID="7">
<anyType xsi:type="xsd:string">2</anyType>
<anyType xsi:type="xsd:string">8</anyType>
<anyType xsi:type="xsd:string">11</anyType>
</Division>
</DivisionProjectType>
Som ni säkert märker är jag relativt grön på objektorienterad programmering och serialisering...
Hur bygger jag min klass för att uppnå detta?
/Bästa hälsningar
StefanSv: UserSettings klass
Så långt det går skulle jag använda databasstruktur för att beskriva information och relationer. Att spara data som blobbar i sql-servern tar ju bort nästan all funktionalitet som en relationsdatabas erbjuder.
Men om vi förutsätter att databasen av någon anledning inte får förändras och det är satt att det ska sparas i ett fält så kan följande sätt fungera:
Antar att xml-dokumentet beskriver _en_ avdelning?
För att beskriva detta i en klass kan du använda collection-typen.
Skapa följande klasser:
*Avdelning - Innehåller avdelningsdata+lista med divisioner+stödfunktioner
*Division - Innehåller divisionsdata+lista med projekttyper
*Projekttyp - Innehåller proekttypdata
*Och eventuellt list-klasser för dessa (ärvda av collectionbase).
Avdelnings-klassen kan innehålla en lista med divisions-objekt. Varje divisionsobjekt innehåller i sin tur sedan en lista med Projekttyper.
När du laddar en avdelning så itererar du igenom datat och skapar objekt efter denna struktur (samt lägger till dessa i listorna).
När du vill spara det till databasen så görs samma sak fast baklänges.
Vet inte om det ger så mycket det här.. Svårt att säga vad du vill ha för svar.. :-)
Det du kan göra är också att dekorera klassen med <serializable>-attributet. Då kan du serialisera hela objektet till text (databas/fil/minne). Hittade en länk:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexxml/html/xml01202003.asp
Mvh
Peter