Foxtable(狐表)用户栏目专家坐堂 → “打印后台数据”代码无法移植?


  共有15825人关注过本帖树形打印复制链接

主题:“打印后台数据”代码无法移植?

帅哥哟,离线,有人找我吗?
floor2
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:369 积分:2911 威望:0 精华:0 注册:2009/4/1 12:51:00
“打印后台数据”代码无法移植?  发帖心情 Post By: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()



该如何处理,谢谢。


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/3/4 11:58:00 [只看该作者]

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
易服
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:369 积分:2911 威望:0 精华:0 注册:2009/4/1 12:51:00
  发帖心情 Post By:2011/3/5 10:00:00 [只看该作者]

好的 谢谢了,自己怎么也找不出缘由啊

 回到顶部
帅哥哟,离线,有人找我吗?
floor2
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:369 积分:2911 威望:0 精华:0 注册:2009/4/1 12:51:00
  发帖心情 Post By:2011/3/5 13:05:00 [只看该作者]

再请问个问题 
能否把条件设为变量
dim nf as double
cmd.CommandText = "Select * From {发货表} Where Year(日期) = NF And Month(日期) = 6" 
 我想筛选当前客户对应的行,但是无法用变量,谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/3/5 13:15:00 [只看该作者]

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

建议看看:

 

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

 


 回到顶部
帅哥哟,离线,有人找我吗?
floor2
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:369 积分:2911 威望:0 精华:0 注册:2009/4/1 12:51:00
  发帖心情 Post By:2011/3/5 13:37:00 [只看该作者]

可以了 谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
易服
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By: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()


 回到顶部