简单的数据统计
本节任务
我们希望让用户通过下面的网页输入年月:
单击“开始统计”,由Foxtable统计出该月各产品的销售数量,并显示在用户的浏览器上:
知识准备
用户是通过表单(form)输入数据的,这是我们本节要用到的一个表单:
第1行代码为:
<form action='showtj.htm' enctype='multipart/form-data' method='post' id='form1' name='form1'>
表示用户单击确定按钮后,将结果提交到后台的showtj.htm网页处理,这个表单的名称为form1,数据提交方式为post
再看第3行代码:
年: <input type='number' name='year' id='year' min='2000' max='2018'><br/><br/>
表示这是一个数值输入框,输入值的范围在2000到2018之间,这个输入框的名称(name)为"year",我们必须给输入框指定name属性,因为后台的Foxtable要通过name属性取得输入值。
服务端的HttpRequest事件通过e参数PostValues获取用户输入的值,这是一个字典,键为输入框的name属性,值就是用户所输入的值,例如在HttpRequest事件 获取用户通过上述表单输入的年份的代码为:
Dim
y As Integer
= 0
'将输入的年转换为整数,因为有的浏览器数值输入框也能输入字符!
Integer.TryParse(e.PostValues("year"),
y)
If y = 0
Then
e.WriteString("请输入年!")
End
If
完整代码
下面是HttpRequest事件的完整代码,代码不长,却完成了生成输入页面、获取用户输入 内容、统计数据,以及呈现统计结果等四大任务:
Select
Case e.Path
Case "saletj.htm"
Dim sb
As New
StringBuilder
sb.AppendLine("<form
enctype='multipart/form-data' action='showtj.htm' method='post'
id='form1'
name='form1'>")
sb.AppendLine("请输入要统计的年月:</br></br>")
sb.AppendLine("年:
<input type='number' name='year' id='year' min='1999' max='2018'><br/><br/>")
sb.AppendLine("月:
<input type='number' name='month' id='month' min='1' max='12'><br/><br/>")
sb.AppendLine("<input
Type='submit' name='Sumbit' id='Sumbit' value='开始统计'>")
sb.AppendLine("</form>")
e.WriteString(sb.ToString)
Case "showtj.htm"
Dim y
As Integer =
0
Dim m
As Integer =
0
Integer.TryParse(e.PostValues("year"),
y)
'获取用户输入的
年
Integer.TryParse(e.PostValues("month"),
m)
'获取用户输入的月
If y
= 0 OrElse
m = 0
Then
e.WriteString("请输入正确的年月!")
Else
'根据输入的年月,统计各产品的销售数量
Dim g
As New
SQLGroupTableBuilder("统计表1",
"订单")
'这里使用后台统计,如果数据已经全部加载可以直接用GroupTableBuilder
'g.ConnectionName
= "数据源" '外部数据表的话要指定数据源名称
g.Groups.AddDef("产品")
g.Totals.AddDef("数量")
g.VerticalTotal
= True
g.Filter
= "Year(日期)
= "
& y
&
" And Month(日期)
= "
& m
'后台统计才可以使用这种表达式的哦
Dim dt
As DataTable
= g.Build(False)
'将统计结果输出到用户浏览器
Dim sb
As New
StringBuilder
sb.AppendLine(y
& "年"
& m
& "月各产品销售数量: <br/><br/>")
For Each
dr As
DataRow In
dt.DataRows
sb.AppendLine(dr("产品")
& ":"
& dr("数量")
& "<br/>")
Next
e.WriteString(sb.ToString)
End
If
End
Select