如何实现mshflexgrid控件的行上下移动
如何实现人员顺序上下任意调整? 没人回复?自己顶一个。 mshflexgrid 是支持通过代码逐单元格对显示内容更改的。因此,如果仅仅是显示的话,只要写代码来替换这些内容就可以了。但如果还需要通过界面编辑来更新绑定的数据库记录集的话,就麻烦一点,需求通过你的代码来更新记录。 我指的是数据库载入后,如何调整行的顺序,数据库按更新后的写入,没有关系的。 数据库表中的记录没有顺序的概念。即使后写入的记录,也有可能在物理位置上处于其他记录前面。
如果需要一个记录集在查询后有固定顺序,可以在表中增加一个字段来表示记录顺序,并在查询时就上 Order By 子句。 我明白你的意思,但我要的是在表格上调整行顺序的语句,不需要把顺序保存到数据库,下次加载再重新调整。 那还有什么困难?mshflexgrid 的单元格是可以任意改写的呀。
我指的是整行的上下移动,不是改写数据,可以发个代码看看吗? 整行的移动,就是首先删除一行,然后将这行内容插入到另一个位置。记住,计算机上内容任何一种形式的改变,无非就是数据的重写。 下面是一个利用 RemoveItem 和 AddIem 方法,移动行的例子。按小键盘的上下键(8、2,不要锁 Num Lock),将使当前选中的行上或下移。
Private Sub Form_Load()MSHFlexGrid1.RowPosition(2) = 3
With MSFlexGrid1
.FixedRows = 0
.Rows = 0
.AddItem "A" & vbTab & 0
.AddItem "B" & vbTab & 1
.AddItem "C" & vbTab & 2
.AddItem "D" & vbTab & 3
End With
End Sub
Private Sub MSFlexGrid1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim strTmp As String, n As Long
If KeyCode <> vbKeyNumpad8 And KeyCode <> vbKeyNumpad2 Then Exit Sub
With MSFlexGrid1
n = .Row
strTmp = .TextMatrix(n, 0) & vbTab & .TextMatrix(n, 1)
If KeyCode = vbKeyNumpad8 And n > 0 Then
.RemoveItem n
.AddItem strTmp, n - 1
.Row = n - 1
ElseIf KeyCode = vbKeyNumpad2 And n < .Rows - 1 Then
.RemoveItem n
.AddItem strTmp, n + 1
.Row = n + 1
End If
End With
End Sub
这样就可以把第二行挪到第三行去 10 楼的方法很好。
Option Explicit
Private Sub Form_Load()
With MSFlexGrid1
.FixedRows = 0
.Rows = 0
.AddItem "A" & vbTab & 0
.AddItem "B" & vbTab & 1
.AddItem "C" & vbTab & 2
.AddItem "D" & vbTab & 3
End With
End Sub
Private Sub MSFlexGrid1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim n As Long
With MSFlexGrid1
n = .Row
If KeyCode = vbKeyNumpad8 And n > 0 Then
.RowPosition(n) = n - 1
.Row = n - 1
ElseIf KeyCode = vbKeyNumpad2 And n < .Rows - 1 Then
.RowPosition(n) = n + 1
.Row = n + 1
End If
End With
End Sub
补充:VB , 控件