Office中国论坛/Access中国论坛
标题: 【教程】从Access到Asp.net(十二) [打印本页]
作者: 情比金坚 时间: 2006-8-18 09:50
标题: 【教程】从Access到Asp.net(十二)
【主页的设计】
我们的主页看起来很多东西,其实设计的时候只有5个控件,分别把他们都拖进页面里来就行了:页眉控件,页脚控件,注册控件都是昨天我们设计的,在资源框里;两个数据输出控件,datagrid和datalist,在工具箱的web控件层。[attach]19834[/attach]
在网页设计中,为了布局的需要,往往把控件都装进table里,同样在这里我们使用了一个table,三行两列,其他的都没什么好讲的了,这里主要讲一个新控件:Datalist:
先拖进一个table控件,设定它的宽,因为你必须考虑在不同分辨率下的显示问题,一般我们都是以600*800为基础设计的,这样在600*800显示器上正好充满,到了大显示器上旁边自动回留空,这比较好处理,如果你设计的大,到了小屏幕上它会变成什么样呢?自己想象把,反正告诉你,他不会按比率缩小,就如同access的窗体也是一样啊。
Table的上面一行和下面一行都要跨行,也就是第一行是一列,中间行是两列,第三行又是一列:就是这样:然后将控件拖入相应的单元格内。
其他的我们都不用讲,主要讲讲新控件datalist,这个控件和datagrid很相似,只是datagrid只能以表格的形式出现,而且每一行只能显示一条记录,而datalist的数据排列方式就自由得多,并且可以横排,也可以竖排,datalist必须设用模版项,需要输出的数据在他的<ItmeTemplate>属性里
表示换行,绑定数据时,使用<%#%>语法。RepeatColumns表示数据按几列输出,我们的示例里是三列。Datalis不能自动分业,但今天我们不用分页,因为我们只是选取最新的6个商品显示,正好一页。拖进了datalist控件后,我们选择“项模版”来进行编辑,在项里面又拖进了image控件等
[此贴子已经被作者于2006-8-18 2:04:29编辑过]
作者: 情比金坚 时间: 2006-8-18 09:51
[attach]19831[/attach]
这些是编辑好了的datalist的html代码:
<asp:datalist id="DataList1" runat="server" Width="511px"
BackColor="White" BorderWidth="1px"
CellPadding="4" BorderStyle="None" BorderColor="#CC9966" ShowHeader="False"
GridLines="Both"RepeatColumns="3">
<ItemTemplate>
商品名:<%# container.dataitem("pname")%><BR>
<asp:Image id=Image1 runat="server" Width="120px" ImageUrl='<%# container.dataitem("pimg")%>' Height="90px">
</asp:Image><BR>
原价:<%# DataBinder.Eval(Container.DataItem, "
rice", "{0:c2}")%>元/KG<BR>
折扣价:<%# DataBinder.Eval(Container.DataItem, "lprice", "{0:c2}")%>元/KG<BR>
<asp:Button id=Button1 runat="server" Width="66px" CommandName="edit" Text="详细查看">
</asp:Button>
<asp
abel id=Label3 runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "id")%>' Visible="False">
</asp
abel>
</ItemTemplate>
</asp:datalist>
【逻辑代码】
在公用部分定义mycon的ado.net连接
Dim myconstr As String = ConfigurationSettings.AppSettings("constr") & Server.MapPath(".") & ConfigurationSettings.AppSettings("dbs")
Dim mycon As OleDb.OleDbConnection = New OleDb.OleDbConnection(myconstr)
因为有两个数据输出控件,所以有两个加载函数:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
Bindgrid()
Bindlist()
End If
End Sub
'为datalist绑定数据的过程,最新上架
Sub Bindlist()
Dim mysql As String
mysql = "SELECT top 6 * FROM tab_Pinfo order by id desc"
Dim mycmd As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(mysql, mycon)
Dim dt As Data.DataSet = New Data.DataSet
mycmd.Fill(dt)
Dim dv As Data.DataView = New Data.DataView(dt.Tables(0))
DataList1.DataSource = dv
DataList1.DataBind()
End Sub
'为datagrid绑定数据的过程,销售排名
Sub Bindgrid()
Dim mysql As String
mysql = "SELECT TOP 6 tab_salerecord.pid, tab_Pinfo.pname, Sum(tab_salerecord.pcount) AS monthsum" _
& " FROM tab_salerecord INNER JOIN tab_Pinfo ON tab_salerecord.pid = tab_Pinfo.id" _
& " WHERE Month(tab_salerecord.sdate) = Month(Now())" _
& " GROUP BY tab_salerecord.pid, tab_Pinfo.pname" _
& " ORDER BY Sum(tab_salerecord.pcount) DESC"
Dim mycmd As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(mysql, mycon)
Dim dt As Data.DataSet = New Data.DataSet
mycmd.Fill(dt)
Dim dv As Data.DataView = New Data.DataView(dt.Tables(0))
DataGrid1.DataSource = dv
DataGrid1.DataBind()
End Sub
最后我们借用了datalist里的edit事件来写命令,打开了另一个窗体,并传递了一个参数过去——就是目前商品的ID号:
Private Sub DataList1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles DataList1.EditCommand
Dim lab As Label
Dim pid
lab = e.Item.FindControl("label3")
pid = lab.Text
Response.Write("<script language='javascript'>open('buyfrom.aspx?pid=" & pid & "','','')</" & "script>")
End Sub
作者: 情比金坚 时间: 2006-8-18 09:54
【购买窗体】
这就是通过主页打开的新窗体:[attach]19832[/attach]
除了页眉页脚外,就是一个图片控件,4个文本框控件,分别用于显示商品名称、商品介绍,单价和折扣价,还有一些标签控件,写着一些提示。
【添加到购物车的类】
昨天讲的是控件,今天我们来讲类:如果说控件是汽车零件总成,那类就是设计图纸,他更抽象,更广泛,并且可以从他的父类那里继承属性,比如说铜是导电的,那用铜加工的零件也是导电的,我们今天建立一个操作数据库的类,它继承了ado.net的属性,所以他可以操作数据库:
点击右键——〉选择添加——〉添加类:在其中写一个过程:
[attach]19833[/attach]
Public Class Class1
Inherits System.Web.UI.Page
'pid是商品编号,uid是当前用户编号
Sub shopcar_add(ByVal pid As Integer, ByVal uid As Integer)
Dim myconstr As String = ConfigurationSettings.AppSettings("constr") & Server.MapPath(".") & ConfigurationSettings.AppSettings("dbs")
Dim mycon As OleDb.OleDbConnection = New OleDb.OleDbConnection(myconstr)
Dim mysql As String
mysql = "INSERT INTO tab_salerecord(pid,uid,sdate) VALUES (" & pid & "," & uid & ",#" & Now() & "#)"
Dim mycmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(mysql, mycon)
mycon.Open()
'错误陷阱
mycmd.ExecuteNonQuery()
End Sub
End Class
呵呵,根access里的模块差不多吧?其实模块也是一种面向对象编程,你看我们论坛的版主的作品,基本都会使用模块和自定义函数,当使用到类模块的时候,窗体的代码就很小了,比较用得多的是那个打开另存为窗口,挺典型的,office2003以后就有控件了。
不过类可以给出属性,方法,让调用者设置,而函数的属性方法是固定的。我这个类只是一个最简单的示例:
购买窗体的代码如下:两个过程而已
Dim myconstr As String = ConfigurationSettings.AppSettings("constr") & Server.MapPath(".") & ConfigurationSettings.AppSettings("dbs")
Dim mycon As OleDb.OleDbConnection = New OleDb.OleDbConnection(myconstr)
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
viewstate("pid") = Request("pid")
Dim mysql As String
mysql = "SELECT * FROM tab_Pinfo where id=" & viewstate("pid")
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)
Image1.ImageUrl = ta.Rows(0).Item("pimg")
TextBox1.Text = ta.Rows(0).Item("pname")
TextBox2.Text = ta.Rows(0).Item("pmsg")
TextBox3.Text = "¥" & Format(ta.Rows(0).Item("price"), "#.00")
TextBox4.Text = "¥" & Format(ta.Rows(0).Item("lprice"), "#.00")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mymath As New Class1
Dim uid
If Request.Cookies("uid") Is Nothing Then
Response.Write("<script>alert('\n 你尚未登录,请登录后再购买 \n');</script")
Else
uid = Request.Cookies.Get("uid").Value
mymath.shopcar_add(viewstate("pid"), uid)
Response.Write("<script>alert('\n 你所购商品已经加入购物车 \n');</script")
End If
End Sub
【小结】
这两天里我们学习了一些面向对象编程的方法,学习了控件的设计,类的设计,以及控件和类的调用方法。还有一个web控件——datalist的使用
[此贴子已经被作者于2006-8-18 2:00:22编辑过]
作者: sgrshh29 时间: 2006-8-18 20:02
辛苦了!
作者: fan0217 时间: 2006-8-19 00:12
datalist是个很灵活的控件,我喜欢,呵呵!
我对ADO.net感兴趣,功能比ADO大多了,方便,而且可通过多种方法实现。
作者: johnx9 时间: 2006-11-23 04:56
情比金坚斑斑真厉害!辛苦晒!
作者: shizhangzui 时间: 2008-12-14 23:34
版主真伟大!
作者: hotned 时间: 2009-12-13 20:04
级压群芳的无敌贴!
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |