不好意思啊 好几天没上线
其实当时我问这个问题的原因是因为我boss给我一个项目的代码 有个地方我没看明白 比如说
Dim Repin As New Repin 定义了一个 Repin对象 这个对象的有很多字段用来装水晶报表要显示的数据
Repin.Getdata(Rtid) 根据主键查询的一个方法
PrintData.Add(Repin) 将这个对象放到一个PrintData中 PrintData是一个ArrayList
TyBaobiao.SetDataSource(PrintData) 将水晶报表的源对象绑定
CrystalReportViewer1.ReportSource = TyBaobiao 将报表对象绑定到控件上
TyBaobiao.PrintOptions.ApplyPageMargins(margins) ' 应用页边距。
CrystalReportViewer1.Show() 报表控件显示内容
Me.Cursor = Cursors.Default 鼠标样式设置
其中 Repin.Getdata(Rtid)
我不是很明白 因为这个getdata是一个Sub其中的内容是这样的
Public Sub Getdata(ByVal tid As Integer)
Dim ds As New DataSet()
Dim sqlstr, WJyxm As String
Dim i, ia As Integer
Dim Zczstr, Jywhdg, Jywh, JywhdgY, JywhdgJ As String
Dim m, n As Byte
Dim Dgpja(5) As String
Dim dat As Date
Dim Zdpja(3) As String
Dim a, b As Integer
Dim wzp0 As String
Dim BNTZ As Integer
Dim CHECK_TIMESZ As Integer
Dim YNdp As String
Dim WVID, WTIDCJ As String
Dim bgqy As String
Dim XtsjFg As String = 0
Dim XtsjV As String = 0
WTID = tid
WVID = 0
cleared()
Zxbz = Zxbzv
'报表第一部分 基本信息
sqlstr = "select data_check.VID,data_check.REPORT_NO,data_check.FINISH_DATE,data_check.TID," & _
"Vehicle.LICENSE_NO,Vehicle.LICENSE_TYPE,Vehicle.CHASSIS_NO,Vehicle.DRV_TYPE,Vehicle.LAMP,Vehicle.REGDATE," & _
"data_check.CHECK_TYPE,Vehicle.OWNER_NAME,Vehicle.VEH_CLASS,Vehicle.ENGINE_NO,Vehicle.YJTZ," & _
"Vehicle.OUTDATE,data_check.DLY,data_check.PILOT,Vehicle.ODO_READING,Vehicle.XYXS,Vehicle.FUEL, " & _
"Vehicle.BRAND_MODEL, Vehicle.BDY_COLOR," & _
"DATA_CHECK.CONCLUSION,DATA_CHECK.IF_PASSED,DATA_CHECK.CHECK_TIMES,DATA_CHECK.LINE_NUM,DATA_CHECK.ADVICEITEM,DATA_CHECK.folks, DATA_CHECK.IF_ROADCHECK,DATA_CHECK.ADVICECOUNT,Vehicle.FUE_DP,DATA_CHECK.Sfflg,DATA_CHECK.DL_DATE " & _
"from data_check,Vehicle " & _
"where data_check.TID=" & "'" & tid & "'and data_check.VID=Vehicle.VID"
ds = WSQL.GetDataFromDB(sqlstr)
If ds.Tables(0).Rows.Count > 0 Then
WVID = ds.Tables(0).Rows(0)("VID").ToString
Sfflg = ds.Tables(0).Rows(0)("Sfflg").ToString
BDY_COLOR = ds.Tables(0).Rows(0)("BDY_COLOR").ToString
REPORT_NO = ds.Tables(0).Rows(0)("REPORT_NO").ToString
'dat = ds.Tables(0).Rows(0)("FINISH_DATE")
' CHECK_DATE = dat.ToString("yyyy-MM-dd ") '检验日期
CHECK_DATE = ds.Tables(0).Rows(0)("FINISH_DATE")
DY_DATE = ds.Tables(0).Rows(0)("DL_DATE")
bgqy = ds.Tables(0).Rows(0)("ADVICEITEM").ToString
Try
CHECK_TIMESZ = CInt(CHECK_TIMES)
Catch ex As Exception
CHECK_TIMESZ = 1
End Try
sqlstr = "select SYS_DriveType.PAK_POS,SYS_DriveType.Axle_num from DATA_INDEX,Vehicle,SYS_DriveType where DATA_INDEX.ID=" & "'" & tid & "' AND DATA_INDEX.VID=Vehicle.VID and Vehicle.DRV_TYPE= SYS_DriveType.TYPE_NAME order by DATA_INDEX.ID asc"
ds = WSQL.GetDataFromDB(sqlstr)
If ds.Tables(0).Rows.Count > 0 Then
ZCZ = ""
Zczstr = ds.Tables(0).Rows(0).Item(0)
m = ds.Tables(0).Rows(0).Item(1)
For i = 1 To m
n = CByte(Mid(Zczstr, i, 1))
If n = 1 Then ZCZ = ZCZ & i & "轴"
Next
End If
WJyxm = Read_ITEMS_fh(tid, WSQL)
CHECK_Item = WJyxm '检验项目
Jywhdg = "O"
JywhdgY = "O"
JywhdgJ = "O"
'----------------------------------------------------------------------------------------
'报表第三部分
'报表第四部分
'报表第五部分
……
End Sub
上面的代码就是原来的内容 因为我要改的内容变了 查询的表不一样了 所以我改成了下面的样子
Public Function Getdata(ByVal tid As Integer) As Repin1 '这里得到的是水晶报表要显示的数据
Dim repin As New Repin1
'初始化一个类然后返回该对象
Dim xuhao As Integer
Dim strsql As String
xuhao = tid
strsql = "select 车牌号码,号牌种类,车辆类型,车主单位,底盘号码,检验员,测试开始时间,测试结束时间,实际长,实际宽,实际高,实际重量,测量长,测量宽,测量高,测量重量,长百分比,宽百分比,高百分比,重量百分比,货箱长度,货箱宽度,货箱栏板高度,流水号,发动机号码,厂牌型号,是否测量货箱,轴数,轴距数,轴距1 from csjg where 序号= " & xuhao
Dim ccccc As New ClassSQL
Dim qq As DataSet
qq = ccccc.GetDataFromDB(strsql)
repin.axleCount = qq.Tables(0).Rows(0)("轴数").ToString()
'MsgBox(repin.axleCount)
'MsgBox(qq.Tables(0).Rows(0)("轴数").ToString())
repin.axleRange = qq.Tables(0).Rows(0)("轴距数").ToString()
' repin.axleRangeFour = qq.Tables(0).Rows(0)("轴距4").ToString()
repin.axleRangeOne = qq.Tables(0).Rows(0)("轴距1").ToString()
' repin.axleRangeThree = qq.Tables(0).Rows(0)("轴距3").ToString()
' repin.axleRangeTwo = qq.Tables(0).Rows(0)("轴距2").ToString()
repin.boxHeight = qq.Tables(0).Rows(0)("货箱栏板高度").ToString()
repin.boxLong = qq.Tables(0).Rows(0)("货箱长度").ToString()
repin.boxWidth = qq.Tables(0).Rows(0)("货箱宽度").ToString()
repin.carClass = qq.Tables(0).Rows(0)("车辆类型").ToString()
repin.carHeight = qq.Tables(0).Rows(0)("实际高").ToString()
' repin.carID = qq.Tables(0).Rows(0)("序号").ToString()
repin.carLong = qq.Tables(0).Rows(0)("实际长").ToString()
repin.carNum = qq.Tables(0).Rows(0)("车牌号码").ToString()
repin.carOwnerOffice = qq.Tables(0).Rows(0)("车主单位").ToString()
repin.carWidth = qq.Tables(0).Rows(0)("实际宽").ToString()
repin.chassicNumber = qq.Tables(0).Rows(0)("底盘号码").ToString()
repin.checkHumen = qq.Tables(0).Rows(0)("检验员").ToString()
repin.endTime = qq.Tables(0).Rows(0)("测试结束时间").ToString()
repin.meaSureHeight = qq.Tables(0).Rows(0)("测量高").ToString()
repin.meaSureLong = qq.Tables(0).Rows(0)("测量长").ToString()
repin.meaSureWidth = qq.Tables(0).Rows(0)("测量宽").ToString()
repin.widthPrecent = qq.Tables(0).Rows(0)("宽百分比").ToString()
repin.heightPrecent = qq.Tables(0).Rows(0)("高百分比").ToString()
repin.longPrecent = qq.Tables(0).Rows(0)("长百分比").ToString()
If (Math.Abs(Convert.ToDouble(repin.heightPrecent)) > 1) Then
repin.yesnoheight = "不合格"
Else
repin.yesnoheight = "合格"
End If
If (Math.Abs(Convert.ToDouble(repin.longPrecent)) > 1) Then
repin.yesnolong = "不合格"
Else
repin.yesnolong = "合格"
End If
If (Math.Abs(Convert.ToDouble(repin.widthPrecent)) > 1) Then
repin.yesnowidth = "不合格"
Else
repin.yesnolong = "合格"
End If
'MsgBox(repin.heightPrecent)
'MsgBox(Convert.ToDouble(repin.heightPrecent))
'MsgBox(Math.Abs(Convert.ToDouble(repin.heightPrecent)))
'MsgBox(Math.Abs(Convert.ToDouble(repin.longPrecent)))
'MsgBox(Math.Abs(Convert.ToDouble(repin.widthPrecent)))
repin.widthPrecent = qq.Tables(0).Rows(0)("宽百分比").ToString() & "%"
repin.heightPrecent = qq.Tables(0).Rows(0)("高百分比").ToString() & "%"
repin.longPrecent = qq.Tables(0).Rows(0)("长百分比").ToString() & "%"
Return repin
End Function
本来我也是用的sub 但是突然发现没有返回值的话 我无法得到数据 所以我把外面的改了
Repin = Repin.Getdata(Rtid)
这跟原来的代码不一样 我想问一下
之前的代码为什么 Repin.Getdata(Rtid)之后这个对象Repin就能得到值
而我为什么就必须Repin=Repin.Getdata(Rtid)才行