您的位置:首页 > 其它

boolean类型的字段值在DataGrid里显示值为"-1"与"0",怎么样才能让他显示:Ture或false

2006-10-29 08:58 501 查看
微信软件工作室 (MicroInfo Soft Studio)
http://www.playyuer.com
于溪玥(PlayYuer) 2000/02/01 帖:
《VB6 之数据格式化对象使用技巧》(http://microinfo.top263.net/Txt/Format.txt
)
例程下载:(http://microinfo.top263.net/Zip/Format.exe)
Visual Basic 提供了许多工具以满足数据访问编程的需要,其中引用微软数据格式化对象库
(Microsoft Data Formatting Object Library) 格式化对象技术是 VB6 的增强功能。其最大优
点是可以通过编程随心所欲地格式化数据(可参阅 MSDN )。下面以格式化 DataGrid 各列数据为
例,演示数据格式化对象的使用方法。

首先,根据 DataGrid 各列的数据类型,确定格式化后的格式:
布尔(Boolean)型数据:True = 是;False = 否;
数字(Number)型数据:格式化为大写;
其次,确认工程已经引用(Reference)了Microsoft Data Formatting Object Library。
再次,在窗体上绘制一个DataGrid控件。
接下来,就可以编写代码了:

1.声明带 WithEvents 关键字的 StdDataFormat 对象类型的窗体模块级的私有变量,作为大写
格式的数据格式对象:

Option Explicit
Private WithEvents FmtX As StdDataFormat


2.编写Private Sub Form_Load()事件过程:

Private Sub Form_Load()
'创建含有货币、布尔、数字型字段的记录集
Dim adoRecordset As New ADODB.Recordset
adoRecordset.Fields.Append "Fld1", adCurrency, , adFldIsNullable + adFldMayBeNull
adoRecordset.Fields.Append "Fld2", adBoolean, , adFldIsNullable + adFldMayBeNull
adoRecordset.Fields.Append "Fld3", adDouble, , adFldIsNullable + adFldMayBeNull
adoRecordset.Open
adoRecordset.AddNew Array("fld1", "fld2", "fld3"), Array(1001231.01, True, 634532.23)
adoRecordset.AddNew Array("fld1", "fld2", "fld3"), Array(1000.23, False, 89758242)

Set DataGrid1.DataSource = adoRecordset

FormatDataGrid DataGrid1
End Sub


3.编写一个过程,格式化 DataGrid,可在需要的时机调用:

Sub FormatDataGrid(DataGridX As DataGrid)
Dim FmtY As New StdDataFormat '用于布尔型字段格式
FmtY.Type = fmtBoolean
FmtY.TrueValue = "是" '"真" "对"
FmtY.FalseValue = "否" '"假" "错"

Set FmtX = New StdDataFormat '实例化用于格式化货币型字段的对象
FmtX.Type = fmtCustom '用于货币型字段格式

Dim adoRecordsetX As ADODB.Recordset
Set adoRecordsetX = DataGridX.DataSource

Dim i As Integer
For i = 0 To adoRecordsetX.Fields.Count - 1
With DataGridX.Columns.Item(i)
Select Case adoRecordsetX.Fields.Item(i).Type '可根据字段数据类型设置数据格式
Case adNumeric, adVarNumeric, _
adBigInt, adUnsignedInt, adUnsignedTinyInt, _
adUnsignedSmallInt, adUnsignedBigInt, _
adInteger, adSmallInt, adBigInt, adTinyInt, _
adDecimal, adDouble, adSingle '与数字有关的数据类型
.DataFormat.Format = "Standard"
.Alignment = dbgRight
Case adCurrency '货币型
Set .DataFormat = FmtX
.Alignment = dbgRight
Case adBoolean
Set .DataFormat = FmtY '布尔型字段设为自定义格式
.Alignment = dbgCenter
Case adDate, adDBDate, adDBTimeStamp
.DataFormat.Format = "Long Date" '日期、时间
.Alignment = dbgRight
Case Else '其它,如:文本等
.Alignment = dbgLeft
End Select
End With
Next i
End Sub


4.编写数据格式化对象的格式化 (Format) 事件过程:

Private Sub FmtX_Format(ByVal DataValue As StdFormat.StdDataValue)
'读者可自行编写将数字转化为大写的函数!例如(附录: NtoC 函数):
DataValue = NtoC(Trim(Str(DataValue)), "圆", "角", "分")
End Sub

(该方案在 PWin 9.X 和 VB 6.0 下通过。)
数据格式化对象,可以用于格式化各种具有 DataFormat 属性的控件,程序员可以将数据显示
为各种格式。如果格式非常简单,可以使用传统的 Format 函数。如果格式布尔型数据,可以使用
过程级的数据格式化对象。如果格式非常复杂,情况很多,则须使用窗体模块级的带事件数据格式
化对象,并编程该对象的 Format 等事件。

(欢迎去 Http://microinfo.top263.net 下载例程)

================================================
《 附录: NtoC 函数 》
Option Explicit
Public Function NtoC(ByVal sNum As String, Optional ByVal Yuan As String = "美圆", Optional ByVal Jiao As String = "美角", Optional ByVal Fen As String = "美分") As String
If Val(Trim(sNum)) > 0 Then
Dim sIntD, sDecD As String
Dim i, iCount, j, iLength As Integer
Dim lStartPos As Long
Dim sBIT(4), sUNIT(3), sCents(2) As String
sBIT(0) = "" '个
sBIT(1) = "拾"
sBIT(2) = "佰"
sBIT(3) = "仟"
sUNIT(0) = ""
sUNIT(1) = "万"
sUNIT(2) = "亿"
sUNIT(3) = "yu"
sCents(0) = Fen
sCents(1) = Jiao
Dim temp As String
If InStr(Trim(sNum), ".") > 0 Then
temp = Left(Trim(sNum), InStr(Trim(sNum), ".") - 1)
Else
temp = Trim(sNum)
End If
iCount = IIf(Len(temp) Mod 4, Len(Trim(temp)) / 4 + 1, Len(Trim(temp)) / 4)
lStartPos = 1
For i = iCount To 1 Step -1
If i = iCount And Len(Trim(temp)) Mod 4 <> 0 Then
iLength = Len(Trim(temp)) Mod 4
Else
iLength = 4
End If
sIntD = Mid(Trim(temp), lStartPos, iLength)
For j = 1 To Len(Trim(sIntD))
If Val(Mid(sIntD, j, 1)) <> 0 Then
NtoC = NtoC & Choose(Val(Mid(sIntD, j, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & sBIT(Len(Trim(sIntD)) - j)
Else
If Val(Mid(sIntD, j + 1, 1)) <> 0 Then
NtoC = NtoC & "零"
End If
End If
Next j
lStartPos = lStartPos + iLength
If i < iCount Then
If (Val(Mid(sIntD, Len(Trim(sIntD)), 1)) <> 0 Or Val(Mid(sIntD, Len(Trim(sIntD)) - 1, 1)) <> 0 Or Val(Mid(sIntD, Len(Trim(sIntD)) - 2, 1)) Or Val(Mid(sIntD, Len(Trim(sIntD)) - 3, 1)) <> 0) Then
NtoC = NtoC & sUNIT(i - 1)
End If
Else
NtoC = NtoC & sUNIT(i - 1)
End If
Next
If Len(Trim(NtoC)) > 0 Then
NtoC = NtoC & Yuan
End If
'小数
If InStr(1, Trim(sNum), ".") <> 0 Then
sDecD = Right(sNum, Len(Trim(sNum)) - InStr(1, Trim(sNum), "."))
For i = 1 To Len(Trim(sDecD))
If Val(Mid(Trim(sDecD), i, 1)) <> 0 Then
NtoC = NtoC & Choose(Val(Mid(Trim(sDecD), i, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖")
NtoC = NtoC & sCents(2 - i)
If i >= 2 Then
Exit For
End If
Else
If Len(Trim(NtoC)) > 0 Then
NtoC = NtoC & "零"
End If
End If
Next i
Else
NtoC = NtoC & "整"
End If
Else
NtoC = "零" & Yuan
End If
End Function
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐