Avatar billede jih Nybegynder
10. maj 2005 - 03:13 Der er 10 kommentarer og
2 løsninger

column size på MSFlexGrid

Hey.. Jeg har et lille problem.. jeg har lavet mig en fin lille telefonbog på computeren... men jeg havde lavet den med en listbox.. nu havde jeg tænkt mig at bruge en database og MSFlexGrid istedet.. men der er et problem... størrelsen på hver column er alt for lille... Jeg vil helst lave det sådan at den bliver lavet om med det samme, så man slipper for at resize den hver gang man åbner programmet.. Det ville være ekstra godt med en funktion der tilpasser column width til størrelsen af indholdet.. Er der nogen der har et godt forslag..? :-)

// WebPsycho
Avatar billede joern Nybegynder
10. maj 2005 - 10:47 #1
Hej.

grindhold.ColWidth(0) = 480
grindhold.ColWidth(1) = 500
grindhold.ColWidth(2) = 2300
grindhold.ColWidth(3) = 2300
grindhold.ColWidth(4) = 1040
grindhold.ColWidth(5) = 900
grindhold.ColWidth(6) = 1050

Fra et af mine programmer.

Ønsker du at bredden indstilles til det største indhold må du under indlæsningen af data teste på længden af strengen i de enkelte søjler.  Lidt omstændeligt vil jeg mene.

if len(streng)> a then a = len(streng)

til sidst

grindhold.colwidth(7) = a * 70    '70 er twips - hvis ikke det svarer til et tegn, så eksperimentér med værdien.
Avatar billede jih Nybegynder
10. maj 2005 - 13:46 #2
nu har jeg prøvet at gøre det sådan her:

Private Sub Form_Load()
  Dim a As Integer
  a = 0
  Do While Not Data1.Recordset.EOF
    If (Len(Data1.Recordset.Fields("Name")) > a) Then
      a = Len(Data1.Recordset.Fields("Name"))
      MSFlexGrid1.ColWidth(0) = a * 70
    End If
    If (Len(Data1.Recordset.Fields("Nummar")) > a) Then
      a = Len(Data1.Recordset.Fields("Nummar"))
      MSFlexGrid1.ColWidth(1) = a * 70
    End If
    Data1.Recordset.MoveNext
  Loop
End Sub

men får følgende fejl ved den første if sætning:
If (Len(Data1.Recordset.Fields("Name")) > a) Then

fejlen er:
"Run-time error '91':
Object variable or With block not set"

hvad kan det skyldes..?

forresten, sidst jeg prøvede at lave om på col.width på den måde virkede det ikke.. den sagde bare at det var en ugyldig værdig... brugte ColWidth(1) for Fields("Navn") og ColWidth(2) for Fields("Nummar")... den første er jo fixed, så den skal ikke laves om på..
Avatar billede jih Nybegynder
10. maj 2005 - 13:53 #3
Har lige taget et lille screenshot..
http://webpsycho.users.whitehat.dk/images/screenshot.jpg
Avatar billede joern Nybegynder
10. maj 2005 - 14:36 #4
Hej.

Det er Visual Basic vi taler om, ikke?  Det er ikke VBA (Visual Basic for Applications).  Hvis du markerer ordet 'len' (som er length af en streng), og trykker på F1, vil on-line hjælpen vise dig om det udtryk er med i VBA.  Jeg bruger ikke VBA og kender ikke til hvor meget man kan med det.

Men fejlen lyder som om variablen ikke er sat, altså ikke indeholder noget.  Prøv at indsætte en msgbox der viser indholdet, som du vil tage længden af.

msgbox(Data1.Recordset.Fields("Name"))

Men det med VB > VBA må du lige afklare.

M.v.h. Jørn
Avatar billede jih Nybegynder
10. maj 2005 - 14:40 #5
hej... jeg bruger VB.. ikke VBA.. du kan se i screenshot.. Bruger VB 6..
Avatar billede jih Nybegynder
10. maj 2005 - 14:44 #6
tjae... nu har jeg prøvet med
MsgBox Data1.Recordset.Fields("Navn")
men den returnerer den samme fejl... hvad kan det så skyldes ? Den samme fejl kommer også når jeg bruger fx Data1.Recordset.MoveNext .MoveFirst .MoveLast og .MovePrevious
Avatar billede jih Nybegynder
10. maj 2005 - 14:52 #7
jeg har også en anden løsning, hvis det bliver for besværligt... jeg kan sætte ColWidth til en bestemt bredde... så den fylder hele FlexGrid'en.. så skal jeg bare vide.. hvordan kan man sortere efter navn..? som du kan se på screenshot'et sorterer den ikke helt rigtigt... aHMaD kommer først... og sidst i 'a' linien kommer aC...
Avatar billede joern Nybegynder
10. maj 2005 - 16:04 #8
Hej.

MSFlexGrid kan selv sortere, og hvilken kolonne der sorteres på, kan ændres dynamisk af brugeren, ligesom der kan skiftes mellem stigende og faldende orden.

Jeg har til gengæld ikke megen viden om Access, da jeg ikke bruger den eller andre databaser under mine appliaktioner, jeg bruger ren ascii. 
Men når du kan indlæse fra din database, må du ogås kunne vise indholdet af et felt, hvis ellers du beskriver det korrekt - og tillige lade funktionen 'len' vise dets længde i antal tegn.  Så der må være noget galt med udtrykket  Data1.Recordset.Fields("Name")  Prøv at kigge i access-hjælpen, eller har du helt styr på det?

Jeg vil blot tilføje, at du selvfølgelig skal have en tæller for hver kolonne, dt kan jo være en post højere oppe der har max. i kolonne 3 og den trediesidste, der har max. i kolonne 4.  I access kan man sætte felternes max-længde.  Det kunne du gøre og så lade MSFlexGrid indrette sig efter det.  I øvrigt bruger de fleste access-brugere vist datagrid, som jeg heller ikke ved noget om.
http://jkfsoft.dk/musik32.htm var mit eksempel fra.

M.v.h. Jørn
Avatar billede jih Nybegynder
10. maj 2005 - 17:28 #9
ok.. jeg har skiftet MSFlexGrid ud med DBGrid.. Data Bound Grid.. DataGrid ville ikke rigtigt fungere.. og jeg har brugt DBGrid før, kan jeg se.. ved du hvordan jeg kan skifte bredden på hver column i en DBGrid..? jeg vil gerne smide nogle ekstra points ind, om du synes det bliver for besværligt.. :-)
Avatar billede joern Nybegynder
10. maj 2005 - 18:01 #10
Hej.

Det betyder ikke noget for mig med point, jeg har mange og spørger næsten aldrig mere.  Men jeg ved ikke noget om datagrid.  Mon ikke det er nogenlunde samme kommandoer som i flexgrid?  Du kan vel se kontrollens properties i dit udviklings-vindue.  Ellers vil 'hjælp' altid kunne vise en oversigt over både metoder og egenskaber.

Eksperten har en søgefunktion.  Hvis ikke andre der har viden på området kommer på banen, kan du prøve at bruge den.  Søg evt. også i konferencen om Access og ikke kun i VB.  Datagrid er en Access-ting, den kan kun bruges sammen med en database.

M.v.h. Jørn
Avatar billede jih Nybegynder
10. maj 2005 - 20:42 #11
hey.. har fundet ud af det.. jeg har brugt VisData.. det interne "database" program for VB.. lavede bare en ny query hvor jeg så sorterede listen efter navn... så det går fint nu.. :-) Eller har jeg også fundet ud af alle de andre funktioner.. det med bredden var ikke så vigtigt alligevel, fordi jeg har inkluderet en søgefunktion, som så bare smider resultatet ind i en listbox på en anden form... det er så fint nok.. :-) Men tak for tiden.. Giver dig halvdelen af pointsene... ;-)

// WebPsycho
Avatar billede joern Nybegynder
10. maj 2005 - 21:29 #12
Hej. 

Ja, undertiden kan det befordre udviklingen at lade andre kommentere problematikken.

Tak for point anyway.  M.v.h.  Jørn
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