我有两大问题:
1.如何将表格数据从左到右一行行的显示?
2.如何固定每行的显示行数?
首先我将数据库的结果用VSFlexGrid表格控件显示出来,按照表格控件的常规顺序是从上之下依次显示完结果(图1),但是我想一行一行的显示,每行显示3个单元格数据,如第一行从左到右显示完3个单元格数据后自动将剩下的数据显示到地下一行(图2)。
我将VSFlexGrid控件 改为.Cols = Adodc2.Recordset.RecordCount + 1不知正不正确,虽然它可以从左到右显示数据,但是它是在一行显示完所以的数据,而不能每行只显示3个数据,无法达到要求中的效果.
(请各位师兄师姐帮帮忙看一看该如何解决)
(图1)常规表格控件显示
|―――――|
| 张三 |
|―――――|
| 李四 |
|―――――|
| 王二 |
|―――――|
| 陈五 |
|―――――|
| 赵六 |
|―――――|
(图2)要求表格控件显示
|―――――|―――――|―――――|
| 张三 | 李四 | 王二 |
|―――――|―――――|―――――|
| 陈五 | 赵六 | |
|―――――|―――――|―――――|
Adodc2.ConnectionString = "Provider=MSDASQL.1;Password=haorong1983107;Persist Security Info=True;User ID=sa;Data Source=123;Initial Catalog=cs"
strsql = "select * from csc"
Adodc2.RecordSource = strsql
Adodc2.Refresh
Do While Adodc2.Recordset.EOF = False
’ RecordCount记录集中的记录数
VSFlexGrid1.Cols = Adodc2.Recordset.RecordCount + 1
For I = 1 To Adodc2.Recordset.RecordCount
Dim strFloor As String
strFloor = Adodc2.Recordset("姓名")
VSFlexGrid1.TextMatrix(0, I) = strFloor
Adodc2.Recordset.MoveNext
Next I
Loop
Adodc2.Recordset.Close
1.如何将表格数据从左到右一行行的显示?
2.如何固定每行的显示行数?
首先我将数据库的结果用VSFlexGrid表格控件显示出来,按照表格控件的常规顺序是从上之下依次显示完结果(图1),但是我想一行一行的显示,每行显示3个单元格数据,如第一行从左到右显示完3个单元格数据后自动将剩下的数据显示到地下一行(图2)。
我将VSFlexGrid控件 改为.Cols = Adodc2.Recordset.RecordCount + 1不知正不正确,虽然它可以从左到右显示数据,但是它是在一行显示完所以的数据,而不能每行只显示3个数据,无法达到要求中的效果.
(请各位师兄师姐帮帮忙看一看该如何解决)
(图1)常规表格控件显示
|―――――|
| 张三 |
|―――――|
| 李四 |
|―――――|
| 王二 |
|―――――|
| 陈五 |
|―――――|
| 赵六 |
|―――――|
(图2)要求表格控件显示
|―――――|―――――|―――――|
| 张三 | 李四 | 王二 |
|―――――|―――――|―――――|
| 陈五 | 赵六 | |
|―――――|―――――|―――――|
Adodc2.ConnectionString = "Provider=MSDASQL.1;Password=haorong1983107;Persist Security Info=True;User ID=sa;Data Source=123;Initial Catalog=cs"
strsql = "select * from csc"
Adodc2.RecordSource = strsql
Adodc2.Refresh
Do While Adodc2.Recordset.EOF = False
’ RecordCount记录集中的记录数
VSFlexGrid1.Cols = Adodc2.Recordset.RecordCount + 1
For I = 1 To Adodc2.Recordset.RecordCount
Dim strFloor As String
strFloor = Adodc2.Recordset("姓名")
VSFlexGrid1.TextMatrix(0, I) = strFloor
Adodc2.Recordset.MoveNext
Next I
Loop
Adodc2.Recordset.Close
when not rs.eof
select case rs.AbsolutePosition mod /3 (求余数)在第几列
case 0 m=2
case 1 m=1
case 2 m=2
end select
n=fix(rs.AbsolutePosition/3) (求除数)在第几行
VSFlexGrid1.TextMatrix(m, n)=rs(“姓名”)
rs.movenext
wend
没调试,楼主可以试一下
你给我的代码我按你说的要求调试是好的。说实话你蛮厉害的,我相信你一定是个高手。
不过还有两个小问题再请教小磊:
1.为什么数据在显示的时候不是从0单元的坐标开始显示的,而是从01单元的坐标开始显示了?(看图1.0)
2.我想把控件MSHFlexGrid1.ROWS(行数)的默认值设为1,在显示数据的时候MSHFlexGrid1.ROWS根据数据的长度自动增加行?----------------------------------------------------------------------------------(实际显示效果) (图1.0)
|―――――|―――――|―――――|
| | 张三 | 王二 |
|―――――|―――――|―――――|
| 陈五 | 赵六 | |
|―――――|―――――|―――――|(要求显示效果) (图1.1)
|―――――|―――――|―――――|
| 张三 | 王二 | 陈五 |
|―――――|―――――|―――――|
| 赵六 | | |
|―――――|―――――|―――――|
麻烦小磊在帮我看一下While Not rs.EOF
Select Case rs.AbsolutePosition Mod 3
Case 0
m = 0
Case 1
m = 1
Case 2
m = 2
End Select
n = Fix(rs.AbsolutePosition / 3) '(求除数)在第几行
MSHFlexGrid1.TextMatrix(n, m) = rs ("姓名")
rs.MoveNext
Wend
m=0
do while not rs.eof
MSHFlexGrid1.TextMatrix(n, m) = rs ("姓名")
m=m+1
if m>2 then
n=n+1
m=0
MSHFlexGrid1.rows=MSHFlexGrid1.rows+1
'我忘记上面的做法是否可以增加行去了,不行的话试试下面的方法,电脑上没VB。
MSHFlexGrid1.additem ""
end if
rs.movenext
loop
If rs.RecordCount Mod 3 = 0 Then
VSFlexGrid1.Rows = Fix(rs.RecordCount / 3)
Else
VSFlexGrid1.Rows = Fix(rs.RecordCount / 3) + 1
End If
While Not rs.EOF
Select Case rs.AbsolutePosition Mod 3 '(求余数)在第几列
Case 0: m = 2
Case 1: m = 0
Case 2: m = 1
End Select
If m = 2 Then
n = Fix(rs.AbsolutePosition / 3) - 1 '(求除数)在第几行
Else
n = Fix(rs.AbsolutePosition / 3)
End If
VSFlexGrid1.TextMatrix(n, m) = rs("userid")
rs.MoveNext
Wend
帮你调试好了,你看看
(你千万不要哭)
再问你几个问题:
1.用鼠标点击某一个单元格时 单元格背景色就变为红色,点击下一单元格时前一单元格背景色自动还原(原始背景色"白色") 我想用VSFlexGrid1.CellBackColor(单元格背景色)属性,可以达到吗?
2.你是哪里人,现在在上班没?
3.怎样送积分操作?
以上问题你可以不回答,但送积分一定要回答.谢谢
VSFlexGrid1.Cell(flexcpBackColor, VSFlexGrid1.Row, 0, VSFlexGrid1.Row,VSFlexGrid1.Cols - 1) = vbRed
End Sub
Private Sub VSFlexGrid1_LeaveCell()
If VSFlexGrid1.Cell(flexcpBackColor, VSFlexGrid1.Row, 0, VSFlexGrid1.Row, VSFlexGrid1.Cols - 1) = vbRed Then
VSFlexGrid1.Cell(flexcpBackColor, VSFlexGrid1.Row, 0, VSFlexGrid1.Row, VSFlexGrid1.Cols - 1) = vbWhite
End If
End Sub通过两个事件来操作就行,已经调试好了
结帐吗就在我的技术社区里面我的帖子里面点管理,进入后给我输入分数即可,谢谢啦