| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3537 人关注过本帖
标题:我的原创代码,自认为不错,已用于单位的项目中,现分享,大家提意见.
只看楼主 加入收藏
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
结帖率:86.25%
收藏
 问题点数:0 回复次数:13 
我的原创代码,自认为不错,已用于单位的项目中,现分享,大家提意见.

'------------------------------------------------------------------------------------------------------------------------
'函数名:RsFillFlex2
'功能:用记录集填充表格
'创建日期:2007-8-22
'更新日期:2007-8-22
'注意:从第1列开始填充数据,第0列自动生成一个序号列
'由于多出一个序号列,所以表格的列数比记录集的字段数多1
'---------------------------------------------------------------
Public Function RsFillFlex2(strcaption As String, _
grd As MSFlexGrid, _
rs As adodb.Recordset, _
Optional alignFlag As Integer = 0, _
Optional showZeroFlag As Integer = 0, _
Optional Rows_Fixed As Integer = 1, _
Optional TableHead As Integer = 1) As Boolean
'本函数特别要求,对于含的小数点的数值型数据,要根据数据表中的结构显示小数点个数
'功能:将记录添充到表格中
'参数一:表头格式
'参数二:表格控件名称
'参数三:记录集
'参数四:表示是否指定"列对齐方式",为1根据记录集的字段类型来设置,为0根据表格的formatstring设置
'参数五:是否显示数字0,为0不显示,为1要显示
'参数六:固定行数,默认为1
'参数七:表头所占的行数,默认为1 (该参数有何意义?)
'好象记录集必须是客户端游标才行,服务器端游标记录数不好取

Dim i As Long, j As Long, strField As String 'strField用于存放字段内容
Dim vnttmp As Variant '临时存放每个单元格内容[要能存放各种类型数据,故为variant型]
Dim rsCols As Long '记录集的字段数
Dim grdCols As Long '表格的列数

on Error GoTo errhandler


'记录集未打开,则返回错误
If rs.State <> adStateOpen Then
MsgBox
"没有可供显示的记录集!", 32, "提示"
RsFillFlex2 = False
Exit Function
End If

'首先判断记录集是否有内容[如果无内容要清除表格原有内容],因为记录集正常打开的情况下,也可能一条记录都没有
If rs.BOF = True And rs.eof = True Then
grd.Rows = grd.FixedRows '清除除表头的所有内容
grd.Rows = Rows_Fixed + 1 '无记录时,显示一个空白行
RsFillFlex2 = True
Exit Function
End If

'注意:不能设置固定行,否则会报错[设置固定行时,除非固定行比行数小一,否则报错]

'以下代码运行的前提是:已有记录
With grd
.Rows = .FixedRows '将行数设置成固定行的行数
.
Clear '清除原有内容[重要]
.
FormatString = strcaption '格式化表头,确定列数
grdCols = .Cols '取表格列数
rsCols = rs.Fields.Count '记录集字段数
'判断传来的表头与记录集的字段数是否一致
If grdCols <> rsCols + 1 Then
' MsgBox grdcols
' MsgBox rscols
MsgBox "记录集字段数与表格列数不匹配,表格列数应比记录集列数多1,第0列为序号列!", 16, "提示"
RsFillFlex2 = False
Exit Function
End If

'下面进行表格填充[只有在真正填充之前,才能设置成不重绘,否则容易花屏]
.
Redraw = False '不重绘,目的是提高速度

'确定表格总行数[因为存在表头,故表数行数应等于记录条数加一]
.
Rows = rs.RecordCount + TableHead '该设定决定表格有多少行显示数据,很重要

'根据参数决定是否设置各列对齐方式,为1时不按formatstring设置,按记录集字段类型设置
If alignFlag = 1 Then
For
j = 1 To rs.Fields.Count
Select Case rs.Fields(j - 1).Type
Case
adDecimal, adDouble, adSingle, adNumeric, adBigInt, adInteger, adTinyInt, adSmallInt
'设定为右对齐
.
ColAlignment(j) = 7
Case Else
'设定为左对齐
.
ColAlignment(j) = 1
End Select
Next
End If

rs.MoveFirst
For i = 1 To rs.RecordCount '循环显示记录,有多少条记录则循环多少次
.
TextMatrix(i, 0) = i '第0列显示序号
For j = 1 To rs.Fields.Count '循环处理各个列
'取单元格的值
vnttmp = Trim(rs.Fields(j - 1).Value & "")
'根据不同的类型,设置不同的格式显示
Select Case rs.Fields(j - 1).Type
Case
adDecimal, adDouble, adSingle, adNumeric
If Val(vnttmp) = 0 Then
If
showZeroFlag = 0 Then
strField = ""
Else
'根据数据库中的字段小数位数的定义设置格式[注意:要对小数位数为0进行处理]
Select Case rs.Fields(j - 1).NumericScale
Case 0
strField = Format(vnttmp, "#")
Case 1
strField = Format(vnttmp, "#0.0")
Case 2
strField = Format(vnttmp, "#0.00")
Case 3
strField = Format(vnttmp, "#0.000")
Case Else
strField = Format(vnttmp, "#0.000#")
End Select
End If
Else
'根据数据库中的字段小数位数的定义设置格式[注意:要对小数位数为0进行处理]
Select Case rs.Fields(j - 1).NumericScale
Case 0
strField = Format(vnttmp, "#")
Case 1
strField = Format(vnttmp, "#0.0")
Case 2
strField = Format(vnttmp, "#0.00")
Case 3
strField = Format(vnttmp, "#0.000")
Case Else
strField = Format(vnttmp, "#0.000#")
End Select
End If
Case
adBigInt, adInteger, adTinyInt, adSmallInt
If Val(vnttmp) = 0 Then
If
showZeroFlag = 0 Then
strField = ""
Else
strField = vnttmp
End If
Else
strField = vnttmp
End If

' Case adBoolean
' '布尔值
' strField = IIf(vnttmp = True, "是", "否")
' Case adDBTimeStamp
' '日期时间值
' strField = Left(Format(vnttmp, "yyyy/mm/dd"), 10)
Case Else
strField = vnttmp
End Select
.
TextMatrix(i, j) = strField
Next
rs.MoveNext '显示下一条记录
Next

'设定第几行显示在最前面(用toprow属性)
.
TopRow = Rows_Fixed

' '使表头各列居中
' .Row = 0
' For j = 0 To .Cols - 1
' '.FixedAlignment(j) = 4
' .Col = j
' .CellAlignment = 4
' Next
.
Redraw = True '填完数据后,充许重绘
RsFillFlex2 = True '返回true
End With

Exit Function
errhandler:
grd.Clear
grd.Rows = grd.FixedRows '清除除表头的所有内容
grd.Rows = Rows_Fixed + 1 '无记录时,显示一个空白行
grd.Redraw = True '出错后如果不设置成充许重绘,则会花屏
RsFillFlex2 = False
MsgBox
"发生错误:" & Err.Description
End Function



[此贴子已经被slore于2007-8-22 11:41:08编辑过]

搜索更多相关主题的帖子: 项目 单位 意见 代码 分享 
2007-08-22 11:27
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
帮你把代码高亮,原来的给你备份了。
gVuzOvf7.txt (8.05 KB) 我的原创代码,自认为不错,已用于单位的项目中,现分享,大家提意见.



快上课了……
2007-08-22 11:43
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
收藏
得分:0 
谢谢版主.
最好提点意见吧.

2007-08-22 11:54
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
以下是引用slore在2007-8-22 11:43:04的发言:
帮你把代码高亮,原来的给你备份了。
[attach]26406[/attach]

我还是想知道你怎么做的高亮……

2007-08-22 11:56
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
收藏
得分:0 
我也想知道,如何做高亮。

2007-08-22 11:57
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
字符串处理呀论坛基本都支持UBB代码


快上课了……
2007-08-22 12:11
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
以下是引用slore在2007-8-22 12:11:12的发言:
字符串处理呀论坛基本都支持UBB代码

晕……自己做吗?

2007-08-22 12:16
simpson
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:863
专家分:17
注 册:2006-11-16
收藏
得分:0 

斑竹 教教UBB 怎么样?


全国最大的 Java专业电子书免费分享[url]http:///in.asp?id=xrmao[/url]
2007-08-22 13:07
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
以下是引用ggyy66在2007-8-22 11:54:03的发言:
谢谢版主.
最好提点意见吧.

提不了嗬,我目前没有用……

UBB:
http://grad.qdu.edu.cn/yanjiu/lyb/ubb.htm


快上课了……
2007-08-22 13:34
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
以下是引用slore在2007-8-22 13:34:17的发言:

提不了嗬,我目前没有用……

UBB:
http://grad.qdu.edu.cn/yanjiu/lyb/ubb.htm

我会用UBB……我想问的是你怎么加亮的……用什么软件或者什么代码做的这个功能……

自己做语法加亮还是有点繁的

2007-08-22 15:53
快速回复:我的原创代码,自认为不错,已用于单位的项目中,现分享,大家提意见.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.071724 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved