Avatar billede martinr Nybegynder
03. juni 2004 - 04:34 Der er 5 kommentarer og
1 løsning

Automatisk tabelbredde til tabel med databaseindhold

Håber nogle af jer kan hjælpe mig med mit problem, da jeg ikke har kunnet finde en løsning et andet sted. Jeg ved ikke, om spørgsmålet hører til i denne kategori.

Jeg har en tabel, hvori jeg fylder en masse data fra forskellige tabeller fra en database (dynamisk via ASP). Jeg kunne godt tænke mig en nem måde at sætte tabellens bredde, så den er tilpasset tabellens indhold.

Som det er nu, kan jeg sætte en bestemt størrelse, så indholdet ser fornuftigt ud i tabellen (så hver celle ikke fylder mere end en enkelt linie). Men når jeg senere skal tilføje mere til databasen (der er ikke ret meget i den nu), skal jeg højst sandsynligt rette bredden til igen.

Derfor kunne det være smart med en nem måde at tabelbredden blev tilpasset automatisk hver gang, der hentes data. Jeg har prøvet med diverse bredder, som fx 100, 100px og 100%, men de tilpasser enten til en bestemt størrelse eller efter skærmens bredde.

Jeg tænkte, om man måske kunne lave noget JavaScript, der beregner, hvor lange, de enkelte kolonner skal være (efter den længste tekst i hver kolonne) og derefter sætter tabellens bredde til alle kolonnebredderne lagt sammen, men jeg ved ikke, om det kan lade sig gøre eller i givet fald hvordan.

Jeg håber, at I forstår og kan hjælpe mig.

På forhånd tak.
Avatar billede vbcoder Nybegynder
03. juni 2004 - 08:28 #1
Tja - du har ret i at den er svær. Du kan jo ikke tage højde for om brugeren skulle have ændret fontstørrelse i browseren og så er du jo lige vidt.

En ide kunne være at kigge på antallet af tegn i teksten med funktionen len(strTekst)

Udfra antallet af tegn kunne man så justere bredden af en tabelcelle ved at gange længden med en faktor som svarer ca. til et tegn ved normal skriftstørrelse.

Med fare for hvad der er normalt så bruger de fleste vel en skriftstørrelse på 10-12px og man kunne så bruge en faktor 4-6 for at ramme nogenlunde bredden af et tegn.

Håber input kunne bruges ;-)


//vbcoder
Avatar billede vbcoder Nybegynder
03. juni 2004 - 08:35 #2
Det kan faktisk godt blive lidt tungt hvis du skal løbe en stor tabel igennem for at finde den længste tekst i hver kolonne for derefter at lægge de største sammen og så først til at tegne tabellen og fylde tekster i.

Man kunne måske lave en separat tabel indeholdende et felt for hver kolonne i databasen. I disse felter opdateres hele tiden længden af det længste felt i den pågældende kolonne.

Dvs - når en ny eller redigere post gemmes checkes længden af teksten i kolonnerne og sammenlignes med den tilsvarende kolonnes værdi. Hvis værdien er mindre gøres intet men hvis værdien er større opdateres kolonnens værdi med den nye.

På den måde vil man ikke skulle loope recordset for at finde den længste tekst i en given kolonne men have den ved hånden hele tiden.

Disse kolonne værdier lægges sammen inden tabellen startes og man kan så sætte tabellens bredde med denne sum.

Håber jeg er forståelig - når jeg nu bare skriver ned hvad jeg tænker .... :0)
Avatar billede vbcoder Nybegynder
03. juni 2004 - 08:37 #3
Eller hvad men en flad tekstfil

20,30,60,78,30,10

og lave en array med split når man skal redigere

man kunne godt lave en funktion der ordnede det hele i et hug
Avatar billede martinr Nybegynder
03. juni 2004 - 15:17 #4
Det med browserens fontstørrelse havde jeg slet ikke tænkt på, det gør bare det hele lidt sværere, hvis det også skal tages i betragtning...!

Det er en udemærket idé, du kommer med mht. til en separat tabel til tekstlængderne - problemet er bare, at jeg i forvejen har mange tabeller med mange relationer imellem i min database, så jeg vil helst undgå at skulle tilføje flere data og tabeller til databasen (foreløbigt er der ikke mange data i databasen, men jeg ved, der kommer mange flere til senere).

Det, jeg håbede var, at der var en nem måde at autosætte tabelbredden på til indholdet, i stedet for at man skal rode sig ud i kolonnebredder og JavaScript :( .

Jeg tror, jeg vil lade spørgsmålet stå åbent lidt endnu og se, om der skulle komme flere idéer fra andre til denne problemstilling. Foreløbigt tak for inputtet.
Avatar billede kimovitch Nybegynder
05. juni 2004 - 14:52 #5
Min erfaring er, at browsere har svært ved at generere en pæn tabel, hvis der ikke er ret meget data (hvad skal vi dog stille op med al den luft), men når der er meget data er browserens løsning godt afbalanceret. Før du begynder at kæmpe med beregningerne vil jeg foreslå dig at fylde en masse test-data ind i dit system og se hvordan det kommer til at se ud uden angivelse af bredder på de enkelte kolonner.

Hvis du alligevel vil styre designet suverænt skal du være opmærksom på, at de bredder du angiver af browseren vil blive opfattet som vejledende (minimumsstørrelser) med mindre du bruger style='table-layout:fixed;' i din table tag.

-Kim
Avatar billede martinr Nybegynder
23. februar 2010 - 12:31 #6
Nu har spørgsmålet i skrivende stund været åbent i mere end 5 år uden nye kvalificerede kommentarer/svar i mellemtiden, så jeg lukker hermed selv spørgsmålet.

Tak til vbcoder og kimovitch for kommentering.
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
Kurser inden for grundlæggende programmering

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