30. november 2006 - 00:54Der er
8 kommentarer og 2 løsninger
markeret række i et flexgrid eller datagrid
Hej,
Jeg har prøvet følgende med både et flexgrid og et datagrid.
Jeg har et grid der henter nogle rækker via en adodc forbindelse til en database. Jeg har så en Timer der opdaterer adodc forbindelsen hvert 5. sekund. Det der sker er at hvis man markerer noget på grid'et, fjernes markeringen når grid'et genindlæses. Er der mon nogen der har en løsning på mit problem?
Jeg har selv prøvet følgende via Timer, men det virker ikke:
' ***** Refresh TASK Flexgrid ****** If flextask = "0" Then Adodc3.Refresh Else Dim flexvalue As String flexvalue = flextask.Text Adodc6.Refresh flextask.Text = flexvalue End If ' ***** Refresh TASK Flexgrid ******
Det kan du gøre ved og gemme værdierne row, col, rowsel og colsel før hver refresh og sætte dem igen bagefter.
Dim lRow As Long Dim lCol As Long Dim lSelRow As Long Dim lSelCol As Long
With flextask lRow = .Row lCol = .Col lSelRow = .RowSel lSelCol = .ColSel End With
Adodc6.Refresh
With flextask .Row = lRow .Col = lCol .RowSel = lSelRow .ColSel = lSelCol End With
Så må du selv lige tilpasse det, den bør måske også lige tjekke for om der er lige så mange rækker/kolonner som der var før opdateringen, ellers får du nok en fejl hvis du forsøger og markere mere end der.
Ja men problemet er at grid'et bliver opfrisket fordi nye rækker kommer ind, og så forbliver den rigtige række ikke markeret. Man kan ikke køre en lække af en art som husker ID for den række der var markeret så den bliver markeret igen?
Så snakker du vel kun om en markeret række, for ellers kan det ikke lade sig gøre med flexgrid? Den tillader kun man kan vælge sammenhængede rækker, og hvis en af dine nye rækker kan ryge ind imellem de tidligere valgt række kan de rigtige ikke genmarkeres.
ja jeg snakker kun om en markeret række, men via en anden VB applikation kan der blive tølføjet flere rækker så derfor skal den opdateres og markeringen skulle gerne kunne huskes.
Ok, skulle være til så, så frem du har en kolonne som indeholder en unik værdi
Dim gemRækkeID As Long Dim i As Integer Dim bFundet As Boolean dim gemCol as Integer dim gemColSel as Integer
With MSFlexGrid1 gemRækkeID = .TextMatrix(.Row, 1) 'Her er kolonne 1 ID/unik værdi gemCol = .Col gemColSel = . ColSel
.Refresh
i = 1 'Forsøger og finde en række med tidligere valgte id While Not bFundet And i <= .Rows If .TextMatrix(i, 1) = gemRækkeID Then bFundet = True Else i = i + 1 End If Wend 'Fandt den, så marker den If bFundet Then .Row = gemRækkeID .RowSel = gemRækkeID .Col = gemCol .ColSel = gemColSel End If End With
i = 1 'Forsøger og finde en række med tidligere valgte id While Not bFundet And i <= .Rows If .TextMatrix(i, 0) = gemID Then bFundet = True Else i = i + 1 End If Wend 'Fandt den, så marker den If bFundet = True Then .Row = gemID .RowSel = gemID .Col = gemCol .ColSel = gemColSel End If End With ----
Den kommer med en fejl, hvor der står "Run time error 30009 - Invalid row value"
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.