Avatar billede mhass Nybegynder
30. november 2006 - 00:54 Der 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 ******
Avatar billede helmet Nybegynder
30. november 2006 - 09:25 #1
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.
Avatar billede mhass Nybegynder
30. november 2006 - 10:05 #2
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?
Avatar billede helmet Nybegynder
30. november 2006 - 10:59 #3
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.
Avatar billede mhass Nybegynder
30. november 2006 - 11:47 #4
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.
Avatar billede helmet Nybegynder
30. november 2006 - 13:12 #5
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
Avatar billede mhass Nybegynder
30. november 2006 - 13:36 #6
Jeg har rettet variablerne så de passer til min applikation:

----
Dim gemID As Long
Dim i As Integer
Dim bFundet As Boolean
Dim gemCol As Integer
Dim gemColSel As Integer

  With flextask
    gemID = .TextMatrix(.Row, 0)
    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, 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"

og når jeg debug'er er det på den her linje

.Row = gemID
Avatar billede helmet Nybegynder
30. november 2006 - 13:51 #7
Hvad returnerer .TextMatrix(.Row, 0)?

Mener første kolonne har nummer 1.
Avatar billede mhass Nybegynder
30. november 2006 - 14:17 #8
Den første kollone er 0, og den returnerer lige nu den unikke ID værdi
Avatar billede helmet Nybegynder
30. november 2006 - 14:49 #9
Min fejl, der skal selvfølgelig også stå

If bFundet = True Then
      .Row = i
      .RowSel = i
      .Col = gemCol
      .ColSel = gemColSel
    End If
Avatar billede mhass Nybegynder
30. november 2006 - 17:50 #10
Så spiller det :-) Cool
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