DBGrid, Column reset when Refresh

Posted on 1998-12-13
Medium Priority
Last Modified: 2012-05-04
When i use Refresh to update the contents of the grid
it resets the sizes of the columns and visibility properties to default ones which isn't very useful.
Is there something i can do to stop the resizing after i have initially set them?
Question by:SIMONBRATT

Expert Comment

ID: 1449804
Is it a bound grid? If so, refreshing the data control rather than the grid itself should leave set attributes intact.

Expert Comment

ID: 1449805
Hi Simon
I used this code for a grid control in vb3 and it works perfectly
u might have to modify it slightly. it refreshes when ever a new record is added to the database .
    On Error GoTo eh2:
    Dim rstab As Table
    Dim rsgrid As Table
    Dim i As Integer
    Dim numrec As Integer
    Dim tempnum As Integer
    Set rstab = DB.OpenTable("log")
    rstab.MoveLast ' Count the records.
    grid2.Rows = rstab.RecordCount + 1 ' Set the rows.

    tempnum = rstab.RecordCount + 1
    grid2.Cols = rstab.Fields.Count + 1    ' Set the columns.
    grid2.SelStartCol = 1
    grid2.SelEndCol = grid2.Cols - 1
    grid2.SelStartRow = 1
    grid2.SelEndRow = grid2.Rows - 1

    grid2.Row = 0
    grid2.Cols = 7
    grid2.Col = 0
    grid2.ColWidth(0) = 1

    grid2.Col = 1
    grid2.ColWidth(1) = 1000
    grid2.Text = "Number"
    grid2.Col = 2
    grid2.ColWidth(2) = 1500
    grid2.Text = "Date"
    grid2.Col = 3
    grid2.ColWidth(3) = 1000
    grid2.Text = "Start"
    grid2.Col = 4
    grid2.ColWidth(4) = 1000
    grid2.Text = "End"
    grid2.Col = 5
    grid2.ColWidth(5) = 1800
    grid2.Text = "Dial Option"
    grid2.Col = 6
    grid2.ColWidth(6) = 2300
    grid2.Text = "Result"

    Do Until rstab.BOF ' Loop through the Snapshot.
        numrec = numrec + 1
        If numrec >= 150 Then
            Exit Do
        End If
        On Error Resume Next
        'grid1.Row = 1
          grid2.Row = grid2.Row + 1
        For i = 1 To grid2.Cols - 1 ' Cycle through the columns.
            grid2.Col = i   ' Set the column number.
         If i = 0 Then   ' If first column...
                grid2.Text = i  ' Set the value.
                grid2.Text = rstab(i)
            End If
        Next i
        On Error GoTo 0
        rstab.MovePrevious ' Move to next record.
        'grid1.Row = grid1.Row + 1  ' ' Set the row number.
grid2.HighLight = False
  Exit Sub
End Sub

hope it helps


Author Comment

ID: 1449806
it is a bound grid and i am refreshing the data control when it happens, if i use dbgrid.refresh it doesn't actually refresh the grid? eh?

Author Comment

ID: 1449807
too complicated for a beginner, when does the grid get visibly updated?

Accepted Solution

BETTY earned 40 total points
ID: 1449808
I had this problem in a program I made: when I refreshed the recordset of the Dbgrid (i.e. after a re-sorting or filtering), all column properties were re-set to default.

This is what I made (this example applies to titles and widths only):

1. Create in Module.bas a global variant variable for titles and other for widths (i.e. name them aColTexts and aColWidths).
2. In Form.Load, fill the variables with Array() function.
3. Make a For..Next statement with Array boundary (use LBound and UBound) like:

    Dim nCicle As Long  'It has to be long for LBound/UBound.
    For nCicle = LBound(aColTexts) To UBound(aColTexts)
        f.grdDataGrid.Columns(nCicle).Width = aColWidths(nCicle)
        f.grdDataGrid.Columns(nCicle).Caption = aColTexts(nCicle)

4. Repeat this code just after you refresh the dbgrid.

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…

627 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question