vsflexgrid 控件列位置拖动后最简单的记忆方式是怎样的呢?我想要在下次打开这个报表时显示的是拖动后的位置.
比如一个SQL语句是这样的:select a,b,c,d,.... 通过这条SQL语句查出来的记录集绑定到了vsflexgrid控件上,现在将c列拖到a列的位置,我想要下次打开这张报表时显示的列是:c,a,b,d.... 下次打开时数据还是绑定到界面上的
问题:这样的一样流程中,网格列的位置以怎么的方式保存,下次打开报表时列位置又如何重新设置呢?
比如一个SQL语句是这样的:select a,b,c,d,.... 通过这条SQL语句查出来的记录集绑定到了vsflexgrid控件上,现在将c列拖到a列的位置,我想要下次打开这张报表时显示的列是:c,a,b,d.... 下次打开时数据还是绑定到界面上的
问题:这样的一样流程中,网格列的位置以怎么的方式保存,下次打开报表时列位置又如何重新设置呢?
下次打开报表时列位置又如何重新设置呢?
看看
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
W2=
W3=
下次就读取这个宽度重新设置上去
1,绑定
2,按照RecordSet的顺序,循环所有的Fields,把Fields的Name写到VsFlexGrid的每列的ColKey里(当然你乐意放到啥ColData里或者其他什么里都行)。
3,然后移动格子,随便他怎么移动,往前,往后....
4,保存的时候,或者关闭窗体的时候,把VSFlexGrid每一列循环一遍,把ColKey存储到一个什么东西里,例如:注册表?INI文件?文本文件?XML文件?数据库?
第二次加载的时候:
1,先去读配置,把上次的ColKey的顺序读出来。并且按顺序拼成Field1,Field2....替换你原来SQL语句里边SELECT 之后的东西,嘿嘿。
2,绑定
重复第一次加载时做的事情。