以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  “打印后台数据”代码无法移植?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=9163)

--  作者:floor2
--  发布时间:2011/3/4 10:45:00
--  “打印后台数据”代码无法移植?
做专业报表,在一个表里筛选部分行进行打印,准备移植帮助里“打印后台数据”的代码

Dim doc As New PrintDoc
Dim
rt As New prt.RenderTable
Dim
cmd As New SQLCommand \'定义一个SQL命令
Dim
dt As DataTable \'定义一个数据表变量
Dim
Count As Integer = 0
cmd.CommandText =
"Select * From {发货表} Where Year(日期) = 2009 And Month(日期) = 6"
dt = cmd.ExecuteReader()
\'生成一个临时表
For
Each Col AS DataCol In Dt.DataCols
    rt.Cells(
0,Count).Text = Col.Name
    For
r As integer = 0 To dt.DataRows.Count - 1
        rt.Cells(r +
1,Count).Text = dt.DataRows(r)(Col.Name)
    Next

    Count = Count +
1
Next

rt.Style.Gridlines.All = New prt.Linedef(Color.Gray)
\'灰色网格线
rt.CellStyle.Spacing.All =
1 \'内容距离网格线1毫米
rt.Rows(
0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中

doc.Body.Children.Add(rt)
doc.Preview()


只改了表名,其他都没改动(日期列也同样有的),但显示错误 system.NullReferenceException:在UserCode.build()



该如何处理,谢谢。


--  作者:狐狸爸爸
--  发布时间:2011/3/4 11:58:00
--  

没有看出问题来,测试一下:

dt = cmd.ExecuteReader()
messagebox.show(dt is nothing)


--  作者:易服
--  发布时间:2011/3/5 9:13:00
--  

外部数据需加上数据库名称

cmd.C
cmd.CommandText = "Select * From {发货表} Where Year(日期) = 2009 And Month(日期) = 6"


此主题相关图片如下:2011-3-5 9-17-51.png
按此在新窗口浏览图片
[此贴子已经被作者于2011-3-5 9:18:28编辑过]

--  作者:floor2
--  发布时间:2011/3/5 10:00:00
--  
好的 谢谢了,自己怎么也找不出缘由啊
--  作者:floor2
--  发布时间:2011/3/5 13:05:00
--  
再请问个问题 
能否把条件设为变量
dim nf as double
cmd.CommandText = "Select * From {发货表} Where Year(日期) = NF And Month(日期) = 6" 
 我想筛选当前客户对应的行,但是无法用变量,谢谢。

--  作者:狐狸爸爸
--  发布时间:2011/3/5 13:15:00
--  

当然可以啊,身份表达式,包括Select语句,都可以动态合成的。

建议看看:

 

http://www.foxtable.com/help/topics/1284.htm

 


--  作者:floor2
--  发布时间:2011/3/5 13:37:00
--  
可以了 谢谢。
--  作者:易服
--  发布时间:2011/3/5 15:56:00
--  

Dim Filter As String
Dim cmb As WinForm.ComboBox=e.Form.Controls("ComboBox1")
If cmb.Value IsNot Nothing Then
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & "乡名= \'" & cmb.Value & "\'"
End If

Dim doc As New PrintDoc \'定义一个报表
Dim rt As New prt.RenderTable \'定义一个表格对象
Dim cmd As New SQLCommand \'定义一个SQL命令
Dim dt As DataTable \'定义一个数据表变量
Dim Count As Integer = 0
cmd.C
If cmb.Value  IsNot Nothing Then
    cmd.CommandText = "SELECT 乡名,村名,登记权利,林种,Count(*) AS 宗地数, Round(SUM(面积),1) AS 面积 FROM {申请表} Where 乡名 =\'" & cmb.Value & "\' GROUP BY 乡名,村名,登记权利,林种"
Else
    cmd.CommandText = "SELECT 乡名,村名,登记权利,林种,Count(*) AS 宗地数, Round(SUM(面积),1) AS 面积 FROM {申请表}  GROUP BY 乡名,村名,登记权利,林种"
End If
dt = cmd.ExecuteReader() \'生成一个临时表

Dim rs As New prt.RenderText() \'定义一个文本对象
rt.Width = "Parent.Width" \'列宽自动
rt.Style.Spacing.Top = 4 \'表格和前面对象的垂直间隔为4毫米
If cmb.Value IsNot Nothing Then
    rs.Text = "" & cmb.Value & "登记权利林种宗地数面积统计表"
Else
    rs.Text = "登记权利林种宗地数面积统计表"
End If
rs.Style.Font = New Font("宋体",18,FontStyle.Bold)
rs.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'文本内容水平居中
Doc.PageHeader = rs \'作为页眉使用 \'设置页眉

Dim rt1 As prt.RenderText \'定义一个文本对象
rt1 = New prt.RenderText \'设置文本对象的内容
rt1.Text = "单位:亩.株.块" \'设置文本内容
rt1.Style.TextAlignHorz = prt.AlignHorzEnum.Right \'靠右对齐
rt1.Style.Borders.Bottom = New prt.LineDef(0.3, Color.Green) \'设置底边框
rt1.Style.Padding.Bottom = 0.5 \'底端内容缩进0.5毫米
rt1.Style.FontSize = 10 \'字体大小为8磅
doc.Body.Children.Add(rt1) \'将文本对象加入到表格中

Dim rx1 As New prt.RenderTable \'定义一个表格对象
rx1.Cells(0,0).Text = "第[PageNo]页 共[PageCount]页"
rx1.Style.TextAlignHorz = prt.AlignHorzEnum.Center
rx1.CellStyle.Spacing.Bottom = 0.5 \'底端内容缩进0.5毫米
rx1.Style.FontSize = 10 \'字体大小为8磅
Doc.PageFooter = rx1 \'作为页脚使用
rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All \'将第一行作为表头
rt.RowGroups(0,1).Style.Font = New Font("宋体",12,FontStyle.Bold) \'字体大小

For Each Col AS DataCol In Dt.DataCols
    rt.Cells(0,Count).Text = Col.Name
    For r As Integer = 0 To dt.DataRows.Count - 1
        rt.Cells(r +1,Count).Text = dt.DataRows(r)(Col.Name)
    Next
    Count = Count + 1
Next
rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) \'灰色网格线
rt.CellStyle.Spacing.All = 1 \'内容距离网格线1毫米
rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中
doc.Body.Children.Add(rt)
doc.Preview()