Avatar billede cdull Nybegynder
21. januar 2009 - 17:11 Der er 10 kommentarer og
2 løsninger

Udhentning af tekst til dropdowns, selectbokse osv.

Jeg er i gang med at lave en side for visning af brugerprofiler.
Her sidder jeg med tankerne om hvordan man bedst lave bindingen mellem en bruger og de egenskaber der findes for brugerprofilen.

Hvis vi har en bruger som har tilknyttet en egenskab som er køn. og der kan vælges imellem Mand, Kvinde og Ikke angivet.
Hvordan ville man så bedst lave dette?

Først ville jeg i databasen lave det med en reference til en tabel som indeholder id'er og tekst for køn. Så begyndte jeg at tænke på at det ville blive mange databasekald når man skulle populere alle dropdowns osv. ved rettelse af brugeren.
Så tænkte jeg at man kunne skrive det som tekst i koden i nogle enums. Men det synes jeg bliver for grimt.

Derfor spørger jeg nu jer. Hvordan ville i gøre. Og vigtigst af alt, hvad er den bedste løsning når man tænker på at sitet skal performe og samtidigt være pæn kode.

Kom med nogle forslag. Mange tak.
Avatar billede cdull Nybegynder
22. januar 2009 - 18:37 #1
Er der ingen som har en god ide til dette, eller har jeg formuleret mig dårligt?
Avatar billede gyxi Nybegynder
23. januar 2009 - 12:40 #2
Det giver selvfølgelig bedst performance at  hardkode indholdet i de forskellige dropdowns. Men det forstår jeg du ikke er interesseret i.

Jeg plejer at gøre følgende:

1. En tabel med valgmulighederne, hvor der er en kolonne med et tal fra 1 til det antal valgmuligheder du har ... der er endvidere en kolonne som indeholder den tekst der skal vises for brugeren.

2. Når din dropdown fyldes, bruges teksten i "Text" for hver option og "Value" er tallet i din tabel.

3. Ved siden af vedligeholder du en enum med de forskellige valgmuligheder. Den anvender du til pænt at oversætte den valgte valgmulighed til en værdi der er velegnet at sammenligne med, når du skal anvende den i business logik i din applikation.

Jeg har forklaret lidt mere og illustreret det lidt her:
http://www.dotnyt.dk/2008/09/alt-om-brug-af-enums.html
Avatar billede cdull Nybegynder
23. januar 2009 - 13:06 #3
Hej gyxi. Tak for dit svar.

Det er også sådan jeg tænker det. Den store udfordring er bare performance.
Hvis jeg under rettelsen af en profil skal udhente 20-30 forskellige valgmuligheder som skal bindes på lige så mange drop down bokse bliver det et helvede med database kald.

Jeg overvejer lidt denne løsning, men med brugen af caching så det hentes 1 gang og derefter udhentes fra memory. Det er jo ikke noget som skal opdateres hvert sekund.

Andre forslag?
Avatar billede baddaydaddy Nybegynder
23. januar 2009 - 15:07 #4
Hvis det er statiske værdier der er tale om ville jeg nok helt holdt mig fra at læse fra databasen.
Man kan jo sagtens bruge Enums (som du selv er inde på) eller f.eks. gemme værdierne i AppSettings (web.config). Sig lige til hvis du ønsker eksempel.
Avatar billede baddaydaddy Nybegynder
23. januar 2009 - 15:14 #5
Enums er nok den nemmeste måden, da man kan databinde en dropdownliste direkte, ved ikke lige hvad du mener med at det bliver grimt (en dropdownliste ser da ens ud uanset hvordan man har fyldt den med data)
Avatar billede cdull Nybegynder
23. januar 2009 - 22:25 #6
baddaydaddy. Tak for dit svar.
Hvordan vil du have tekststrenge i en enum?

for lige at tage eksemplet. Hvordan vil du have mand, kvinde, ikke angivet i det. Og hvordan vil du binde direkte til dropdownlisten ?

enum
{
Male = 0,
Female = 1,
NA = 2
}
Avatar billede baddaydaddy Nybegynder
25. januar 2009 - 00:14 #7
Følgende kode giver dig alle navne sat direkte ind i dropdownlisten:

DropDownList1.DataSource = Enum.GetNames(typeof(NameOfEnum));
DropDownList1..DataBind();
Avatar billede cdull Nybegynder
25. januar 2009 - 00:47 #8
Men man kan da ikke have mellemrum i navnene på enums ?

Hvordan vil du have en enum som hedder "Ikke angivet"
Avatar billede cdull Nybegynder
25. januar 2009 - 12:23 #9
Jeg har fundet en god løsning som jeg tror er den bedste for mig.
Jeg gik videre med at holde det i koden og i enums.
Jeg har så tilføjet en description attribute på min enum values til mine tekststrenge. Det virker helt efter hensigten. Nu skal jeg så bare finde en måde at placere det korrekt i koden så at det bliver pænt.

Jeg har fået lidt inspiration fra følgende artikel.
http://blogs.msdn.com/paulwhit/archive/2008/03/31/use-the-descriptionattribute-with-an-enum-to-display-status-messages.aspx

I må gerne begge smide et svar og dele point. Jeg har ikke direkte fået et svar på problemstillingen, men i har givet god inspiration til hvordan jeg skal gøre det.
Mange tak.
Avatar billede baddaydaddy Nybegynder
25. januar 2009 - 13:11 #10
Ja, så er det selvfølgelig lidt mere avanceret, men som jeg kan se har du fundet en løsning og det er jo godt...

Glad for at kunne være til inspiration... ;)
Avatar billede gyxi Nybegynder
25. januar 2009 - 14:07 #11
cdull, ret fed løsning du fandt der. Performancemæssigt er reflection ikke så godt, men sikkert helt fint sammenlignet med at skulle hente fra en database - og ellers kan du jo altid cache alligevel.
Avatar billede cdull Nybegynder
25. januar 2009 - 14:21 #12
ja det var lidt det jeg tænkte. Jeg regner med at lave caching på det, og går det helt galt med performance finder jeg en anden løsning.
Jeg tror nu at den er god nok.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester