Gå til innhold

bruke variabelverdi i navn på grid


Anbefalte innlegg

Jeg har et program med 5 flexgrids på en side som gjør forskjellige uttrekk av en tabell, og lurte på om det var noen mulighet for noe ala dette:

 

1. Kaller flexgridene Grid1, Grid2, Grid3, osv.

 

2. Tilordne verdier til Flexgridene slik:

 

For intGrid = 1 To 5 

       strGridnavn = "Grid"
       strTest = CStr(strGridnavn) + CStr(intGrid)

       rs.Open "SELECT test FROM Testtabell where test.tall = " & intGrid , cn, adOpenDynamic, adLockOptimistic

       Set strTest.DataSource = rs

       strTest.MergeCells = flexMergeFree
           With strTest
               .ScrollBars = 3
               .ColWidth(0) = 2000
               .ColWidth(1) = 800
               .ColAlignment(1) = flexAlignRightCenter
           End With

       strTest.Refresh
       rs.Close

Next intGrid

 

3. Jeg vet dette ikke funker da, men er det noen annen måte å gjøre dette på?

 

Kjipt å skrive nesten det samme 5 ganger etter hverandre....

 

[space]

Lenke til kommentar
Videoannonse
Annonse

Hvis du gir Grid'ene samme navn, f.eks bare Grid. Gjør dette med den første og så de andre, så vil VB spørre om du vil lage en array, og da er det lettere å "snakke" med dem i en for/next loop. For index property'en vil da gå fra 0 til 4 når alle har samme navn. Så du bruker Kontrollnavn(index nummer).property når du koder mot dem.

 

For intGrid = 0 To 4

 

'Bruker intGrid +1 siden for loopen begynner på 0 og du vil ha første selection i sql fra 1.

rs.Open "SELECT test FROM Testtabell where test.tall = " & intGrid + 1 , cn, adOpenDynamic, adLockOptimistic

 

Set strTest.DataSource = rs

 

Grid(intGrid).MergeCells = flexMergeFree

With Grid(intGrid)

.ScrollBars = 3

.ColWidth(0) = 2000

.ColWidth(1) = 800

.ColAlignment(1) = flexAlignRightCenter

End With

 

strTest.Refresh

rs.Close

 

Next intGrid

 

Kan ikke love at denne koden kjører med en gang, siden jeg ikke har testa det i VB, men det ser riktig ut.

Lenke til kommentar

Dukka selvfølgelig opp et annet problem som følge av dette.

 

Hvordan får jeg nå kjørt click prosedyrer når alle Gridene heter det samme?

 

Funka dårlig med Private Sub Grid(1)_Click() eller bare Private Sub Grid_Click()

 

Koden slik den fungerte før:

Private Sub Grid1_Click()
With Grid1
       txtTall.Text = .TextMatrix(.Row, 1)
       
       DoEvents
       txtTall.SetFocus
   End With
End Sub

Lenke til kommentar

Dersom du hadde klippet ut koden og fjernet prosedyren, for å så legge den inn igjen (ved å eksempelvis trykke på en av objektene), ville du fått prosedyren riktig omskrevet. Uansett, her er prosedyren slik den skal være:

 

Private Sub Grid_Click(Index As Integer)
With Grid(Index)
      txtTall.Text = .TextMatrix(.Row, 1)
      
      DoEvents
      txtTall.SetFocus
  End With
End Sub

 

Edit: Code-taggen var ødelagt ...

Endret av aadnk
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...