vsflexgrid 控件列位置拖动后最简单的记忆方式是怎样的呢?我想要在下次打开这个报表时显示的是拖动后的位置.
比如一个SQL语句是这样的:select a,b,c,d,....   通过这条SQL语句查出来的记录集绑定到了vsflexgrid控件上,现在将c列拖到a列的位置,我想要下次打开这张报表时显示的列是:c,a,b,d....  下次打开时数据还是绑定到界面上的
问题:这样的一样流程中,网格列的位置以怎么的方式保存,下次打开报表时列位置又如何重新设置呢?

解决方案 »

  1.   

    网格列的位置以怎么的方式保存, 可用注册表,文件。
    下次打开报表时列位置又如何重新设置呢?
    看看
    Private Sub Command1_Click()
        Dim str As String
        Dim strHeader() As String
        Dim idx As Integer
        
        str = "c,b,d,a"
        strHeader = Split(str, ",")
        
        For idx = 0 To UBound(strHeader)
            VSFlexGrid1.ColPosition(GetColByHeader(strHeader(idx))) = idx
        Next
    End SubPrivate Sub Form_Load()
        Dim idx As Integer
        
        For idx = 1 To 10
            VSFlexGrid1.AddItem "col1 " & idx & vbTab & _
                "col2 " & idx & vbTab & _
                "col3 " & idx & vbTab & _
                "col4 " & idx
            
        Next
    End SubPrivate Function GetColByHeader(strHeader As String) As Long
        Dim idx As Integer
        
        For idx = VSFlexGrid1.FixedCols To VSFlexGrid1.Cols - 1
            If VSFlexGrid1.TextMatrix(0, idx) = strHeader Then
                GetColByHeader = idx
                Exit For
            End If
        Next
        
    End Function
      

  2.   

    保存这个网格列的宽度到INI文件中,W1=
    W2=
    W3=
    下次就读取这个宽度重新设置上去
      

  3.   

    我使用过的最省力的方法:    第一次加载的时候:
           1,绑定
           2,按照RecordSet的顺序,循环所有的Fields,把Fields的Name写到VsFlexGrid的每列的ColKey里(当然你乐意放到啥ColData里或者其他什么里都行)。
           3,然后移动格子,随便他怎么移动,往前,往后....
           4,保存的时候,或者关闭窗体的时候,把VSFlexGrid每一列循环一遍,把ColKey存储到一个什么东西里,例如:注册表?INI文件?文本文件?XML文件?数据库?
        第二次加载的时候:
           1,先去读配置,把上次的ColKey的顺序读出来。并且按顺序拼成Field1,Field2....替换你原来SQL语句里边SELECT 之后的东西,嘿嘿。
           2,绑定
           重复第一次加载时做的事情。