我有两大问题:
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.   

    我给楼主个提示,你可以定位当前记录是第几条,用rs.AbsolutePosition,
    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
    没调试,楼主可以试一下
      

  2.   

    楼主 m,n 顺序弄返了,你注意一下,VSFlexGrid1.TextMatrix(n, m)=rs(“姓名”)
      

  3.   

    谢谢小磊
    你给我的代码我按你说的要求调试是好的。说实话你蛮厉害的,我相信你一定是个高手。
    不过还有两个小问题再请教小磊:
    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
      

  4.   

    n=0
    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
      

  5.   

    VSFlexGrid1.Cols = 3
    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
    帮你调试好了,你看看
      

  6.   

    感谢小磊的帮助,问题才得已解决.
    (你千万不要哭)
    再问你几个问题:
    1.用鼠标点击某一个单元格时 单元格背景色就变为红色,点击下一单元格时前一单元格背景色自动还原(原始背景色"白色")  我想用VSFlexGrid1.CellBackColor(单元格背景色)属性,可以达到吗?
    2.你是哪里人,现在在上班没?
    3.怎样送积分操作?
    以上问题你可以不回答,但送积分一定要回答.谢谢
      

  7.   

    Private Sub VSFlexGrid1_EnterCell()
    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通过两个事件来操作就行,已经调试好了
    结帐吗就在我的技术社区里面我的帖子里面点管理,进入后给我输入分数即可,谢谢啦