标题: 【教程】从Access到Asp.net(十) [打印本页] 作者: 情比金坚 时间: 2006-8-16 08:52 标题: 【教程】从Access到Asp.net(十) 本着时间过半任务过半的原则,我们今天完成mini网上商城的后台制作,其实截止到昨天为止,直接显示的页面我们都已经完成了,只是还少一个类似access中报表的那个东西,要能打印出相关订单明细,提供给仓库发货: 【直接输出窗体】 根据access的设计我们知道,报表来自于一个复杂的查询,同时还要再报表中进行分层和分组,而在asp.net中没有报表控件,我们用一些VB语句来直接控制数据的输出,让它出现分层和分组:
先添加一个web窗体,命名为saleinfo.aspx,然后再它的加载事件中先模拟一个订单号: Dim myid As String
myid = "200607040024"
然后建立加载过程:那个复杂的查询语句就来自于我们的access小样:通过Response.Write输出了一些带有html标记文本以及数据到页面上,这些html标记会被编译为要显示的控件: <A href=javascript:print()>打印</A>调用了ie浏览器上的打印按钮。
Sub BindRed(ByVal myid As String)
Dim mysql As String
mysql = "SELECT tab_Pinfo.pname,tab_Pinfo.pkinds, tab_Pinfo.price, tab_Pinfo.lprice ,tab_salerecord.pcount,tab_Pinfo.lprice*tab_salerecord.pcount AS msum" _
& ",tab_salerecord.lid, tab_salerecord.uid, tab_userinfo.uname,tab_userinfo.address" _
& " FROM (tab_Pinfo INNER JOIN tab_salerecord ON tab_Pinfo.id = tab_salerecord.pid) INNER JOIN tab_userinfo ON tab_salerecord.uid = tab_userinfo.Id" _
& " WHERE tab_salerecord.lid='" & myid & "'"
mycon.Open()
Dim mycmd As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(mysql, mycon)
Dim dt As Data.DataSet = New Data.DataSet
mycmd.Fill(dt)
'输出到表
Dim ta As DataTable
ta = dt.Tables(0)
'输出
Response.Write("定单号:" & ta.Rows(0).Item("lid"))
Response.Write("<br>") '<br>是断行标签
Response.Write("姓名:" & ta.Rows(0).Item("uname"))
Response.Write("<br>")
Response.Write("地址:" & ta.Rows(0).Item("address"))
'建立表格
Dim i, j
Response.Write("<table Width=528px border=1 BorderColor=Black >")
Response.Write("<tr align=center>")
Response.Write("<td>商品名称")
Response.Write("</td>")
Response.Write("<td>种类")
Response.Write("</td>")
Response.Write("<td>单价")
Response.Write("</td>")
Response.Write("<td>折扣价")
Response.Write("</td>")
Response.Write("<td>数量")
Response.Write("</td>")
Response.Write("<td>金额")
Response.Write("</td>")
Response.Write("</tr>")
For i = 0 To ta.Rows.Count - 1 '用循环添加所有的行
Response.Write("<tr>")
Response.Write("<td>" & ta.Rows(i).Item(0)) '名称
Response.Write("</td>")
Response.Write("<td>" & ta.Rows(i).Item(1)) '种类
Response.Write("</td>")
Response.Write("<td>¥" & Format(ta.Rows(i).Item(2), "#.00")) '单价
Response.Write("</td>")
Response.Write("<td>¥" & Format(ta.Rows(i).Item(3), "#.00")) '折扣价
Response.Write("</td>")
Response.Write("<td>" & ta.Rows(i).Item(4)) '数量
Response.Write("</td>")
Response.Write("<td>¥" & Format(ta.Rows(i).Item(5), "#.00")) '金额
Response.Write("</td>")
Response.Write("</tr>")
Next i
Response.Write("<tr>") '行
Response.Write("<tr>")
Response.Write("<td>")
Response.Write("</td>")
Respons作者: 情比金坚 时间: 2006-8-16 08:55 【使用cookies储存用户信息】 前台的登录按钮我们发生了一些变化:改用md5来验证密码,同时用cookies来储存用户信息
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myconstr As String = ConfigurationSettings.AppSettings("constr") & Server.MapPath(".") & ConfigurationSettings.AppSettings("dbs")
Dim mysql As String
Dim mycon As OleDb.OleDbConnection = New OleDb.OleDbConnection(myconstr)
mycon.Open()
If TextBox1.Text = "" Or TextBox2.Text = "" Then
Labelmsg.Text = "请填写正确的用户名和密码,若尚未注册请先注册"
Else
mysql = "select * from tab_admininfo where sname='" + TextBox1.Text + "'"
Dim mycmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(mysql, mycon)
Dim myrs As OleDb.OleDbDataReader
myrs = mycmd.ExecuteReader()
myrs.Read()
If TextBox1.Text = myrs("sname") Then
'If TextBox2.Text = myrs("spwd") Then '这是使用md5加密前的写法
Dim pwdmd5 As String = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox2.Text, "MD5")
If pwdmd5 = myrs("spwd") Then
Response.Cookies("name").Value = myrs("sname") '使用cookie存储姓名
Response.Cookies("pro").Value = myrs("spro") '使用cookie存储权限
Response.Redirect("admin_mat.htm")
Else
Labelmsg.Text = "请输入正确的密码"
End If
Else
Labelmsg.Text = "你还没有注册,请先注册"
End If
End If
mycon.Close()
End Sub 最后在页面加载事件中写:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
Dim myid As String
'myid = "200607040024" '调试时候用的
myid = Request("id") '用来存放订单号
BindRed(myid)
End Sub
同时我们在各个窗体的加载事件中来验证登录者的权限,比如下列代码,"NOpro.htm"是一个出错提示页面,就是如果权限不够就转去提示页面。
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
If Request.Cookies.Get("pro").Value = "3" Then
Response.Redirect("NOpro.htm")
Exit Sub
End If 【小结】 本章我们应该掌握了下列对象:
Cookies对象:用来记录客户的登录信息
Request对象:用来获取前方页面传过来的参数
DataTable对象:ado.net里面的数据表
Web页面的打印命令