您的位置:程序门 -> vb -> 控件



如何自定义vsflexgrid控件的显示行数?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何自定义vsflexgrid控件的显示行数?[已结贴,结贴人:haorong_ttsoft]
发表于:2007-03-24 09:38:23 楼主
我有两大问题:
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
发表于:2007-03-25 18:27:521楼 得分:0
我给楼主个提示,你可以定位当前记录是第几条,用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
没调试,楼主可以试一下
发表于:2007-03-25 18:29:402楼 得分:0
其中rs就是楼主adodc2.recordset
发表于:2007-03-25 23:48:473楼 得分:0
非常感谢楼上的小磊,我先回家试一下,谢谢!感谢!非常感谢!
发表于:2007-03-26 09:35:264楼 得分:0
楼主   m,n   顺序弄返了,你注意一下,vsflexgrid1.textmatrix(n,   m)=rs(“姓名”)
发表于:2007-03-26 10:42:345楼 得分:0
呵呵
发表于:2007-03-26 14:45:416楼 得分:0
谢谢小磊
你给我的代码我按你说的要求调试是好的。说实话你蛮厉害的,我相信你一定是个高手。
不过还有两个小问题再请教小磊:
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
发表于:2007-03-26 15:12:197楼 得分:0
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
发表于:2007-03-26 15:16:378楼 得分:0
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
帮你调试好了,你看看
发表于:2007-03-26 23:27:219楼 得分:0
感谢小磊的帮助,问题才得已解决.
(你千万不要哭)
再问你几个问题:
1.用鼠标点击某一个单元格时   单元格背景色就变为红色,点击下一单元格时前一单元格背景色自动还原(原始背景色 "白色 ")     我想用vsflexgrid1.cellbackcolor(单元格背景色)属性,可以达到吗?
2.你是哪里人,现在在上班没?
3.怎样送积分操作?
以上问题你可以不回答,但送积分一定要回答.谢谢
发表于:2007-03-27 09:29:2810楼 得分:100
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

通过两个事件来操作就行,已经调试好了
结帐吗就在我的技术社区里面我的帖子里面点管理,进入后给我输入分数即可,谢谢啦
发表于:2007-03-27 14:28:1511楼 得分:0
谢了,希望能在网上长碰到你
接分


快速检索

最新资讯
热门点击