设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2994|回复: 7
打印 上一主题 下一主题

[Access本身] 【教程】从Access到Asp.net(十二)

[复制链接]
跳转到指定楼层
1#
发表于 2006-8-18 09:50:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



【主页的设计】


       我们的主页看起来很多东西,其实设计的时候只有5个控件,分别把他们都拖进页面里来就行了:页眉控件,页脚控件,注册控件都是昨天我们设计的,在资源框里;两个数据输出控件,datagrid和datalist,在工具箱的web控件层。
      在网页设计中,为了布局的需要,往往把控件都装进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编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅
2#
 楼主| 发表于 2006-8-18 09:51:00 | 只看该作者

这些是编辑好了的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>
     <aspabel id=Label3 runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "id")%>' Visible="False">
     </aspabel>
  </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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
 楼主| 发表于 2006-8-18 09:54:00 | 只看该作者
【购买窗体】


这就是通过主页打开的新窗体:



除了页眉页脚外,就是一个图片控件,4个文本框控件,分别用于显示商品名称、商品介绍,单价和折扣价,还有一些标签控件,写着一些提示。


【添加到购物车的类】


昨天讲的是控件,今天我们来讲类:如果说控件是汽车零件总成,那类就是设计图纸,他更抽象,更广泛,并且可以从他的父类那里继承属性,比如说铜是导电的,那用铜加工的零件也是导电的,我们今天建立一个操作数据库的类,它继承了ado.net的属性,所以他可以操作数据库:


点击右键——〉选择添加——〉添加类:在其中写一个过程:



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编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
发表于 2006-8-18 20:02:00 | 只看该作者
辛苦了!
5#
发表于 2006-8-19 00:12:00 | 只看该作者
datalist是个很灵活的控件,我喜欢,呵呵!

我对ADO.net感兴趣,功能比ADO大多了,方便,而且可通过多种方法实现。
6#
发表于 2006-11-23 04:56:00 | 只看该作者
情比金坚斑斑真厉害!辛苦晒!
7#
发表于 2008-12-14 23:34:59 | 只看该作者
版主真伟大!
8#
发表于 2009-12-13 20:04:04 | 只看该作者
级压群芳的无敌贴!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 16:30 , Processed in 0.091718 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表