设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
1#
发表于 2006-8-14 09:15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【用代码连接DateGrid】


就如同我在Access里已经不再使用宏,转而使用VBA一样,在asp.net里我也主要以代码来连接数据库,就像在admin_login.aspx 做过的那样。
1、 首先在本也代码的头部定义了全局变量mycon:
    Dim myconstr As String = ConfigurationSettings.AppSettings("constr") & Server.MapPath(".") & ConfigurationSettings.AppSettings("dbs")
Dim mycon As OleDb.OleDbConnection = New OleDb.OleDbConnection(myconstr)
2、 建立一个加载DataGrid1的过程:
    '为datagrid绑定数据的过程
    Sub BindGrid()
        Dim mycmd As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("select id,pkinds from tab_pkinds", 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
3、窗体的加载事件要加载datagrid1,这里引入一个窗体属性:
Page.IsPostBack 属性:获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。如果是为响应客户端回发而加载该页,则为 true;否则为 false。我们当然是首次加载,如果是客户端回发则没有动作,因为客户端回发都有代码控制着呢:
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码
        If Not IsPostBack Then
            BindGrid()
        End If
End Sub

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅
2#
 楼主| 发表于 2006-8-14 09:16:00 | 只看该作者
【DateGrid的分页】
昨天我们在datagrid1里设置了分页,并且设置了上一条,下一条的按钮,如果数据库里的数据超过5条,这两个按钮就会出现,为此我们先手工给数据里添加条目,令其超过5条,或者把每页条目减少一点就可以看到这两个按钮 ,但是点击了没有反应?那是我们还没有写代码:到vb视图,调出翻页命令:PageIndexChanged
    '翻页的事件过程
    Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
        DataGrid1.CurrentPageIndex = e.NewPageIndex
        BindGrid()     '立即刷新
  End Sub
【DateGrid的编辑】
datagrid的其实分成几种状态:普通状态,被选中状态,被编辑状态,它的EditItemIndex属性表示是否编辑,-1表示非编辑,数字则表示被编辑的行:当进入编辑状态时会有更新和返回两个按钮,这是我们用属性生成器的结果,对于自定义来说,不会出现这两个按钮的。

    '切换到更新状态
    Private Sub OnEditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
        DataGrid1.EditItemIndex = e.Item.ItemIndex
        BindGrid()
End Sub
添加了这行代码以后,点击编辑按钮,本行就会进入编辑状态了,
这是取消按钮事件:
    '取消事件过程
    Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.CancelCommand
        DataGrid1.EditItemIndex = -1
        BindGrid()
    End Sub
我们使用更新查询来更新我们所做的修改:这是ado.net所要求的,(用ado可以不用这样写)
    '更新事件过程
    Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
        Dim mysql As String
        Dim mycmd As OleDb.OleDbCommand
        Dim id As Integer = e.Item.Cells(0).Text            '获取激活行的第一单元格的文本
        Dim Txt As String = CType(e.Item.Cells(1).Controls(0), TextBox).Text.ToString        '将单元格转换为textbox控件,再获取他的文本
        mysql = "UPDATE tab_pkinds SET tab_pkinds.pkinds = '" + Txt + "' WHERE id=" & id
        Response.Write(Txt)
        mycon.Open()
        mycmd = New OleDb.OleDbCommand(mysql, mycon)
        mycmd.ExecuteNonQuery()
        mycon.Close()
        DataGrid1.EditItemIndex = -1
        BindGrid()
    End Sub
删除按钮的事件编写当然比较简单,一个删除查询就搞掂它,可是运行以后你会发现,如果他是这一页的最后一条记录,删除后会出错的。所以在重新加载数据前我们要定义显示在那一页:

    '删除按钮的过程
    Private Sub OnDeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.DeleteCommand
        Dim mysql As String
        Dim mycmd As OleDb.OleDbCommand
        Dim id As Integer = e.Item.Cells(0).Text
        mysql = "DELETE FROM tab_Pkinds WHERE id=" & id
        mycon.Open()
        mycmd = New OleDb.OleDbCommand(mysql, mycon)
        mycmd.ExecuteNonQuery()
        mycon.Close()
        Dim lastpage As Integer     '页面数
        lastpage = DataGrid1.CurrentPageIndex
        '判断是否为当前页面的最后一条记录
        If (DataGrid1.PageCount - DataGrid1.CurrentPageIndex = 1) And (DataGrid1.Items.Count = 1) Then
            '判断是否存在上一页页面
            If DataGrid1.PageCount > 1 Then
                lastpage = lastpage - 1
            Else
                lastpage = 0
            End If
        End If
        DataGrid1.CurrentPageIndex = lastpage
        BindGrid()     '立即刷新
    End Sub
【DateGrid的添加】
你可以让datagrid添加一行出来,不过在这里我没有那么做,我在页面下方添加了一个文本框和一个按钮,其实就是像数据表添加一条记录,在重新加载datagrid就是了,对吧?
    '添加一条记录
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim mysql As String
        Dim mycmd As OleDb.OleDbCommand
        If TextBox1.Text <> "" Then<BR
3#
 楼主| 发表于 2006-8-14 09:20:00 | 只看该作者
【系统用户管理】


根据上面的教程不难完成“系统用户管理”的设计,这里值得一提的是,MD5加密的函数用法,建立一个叫admininfo_mat.aspx 的web窗体,效果如下:前面是没有用md5的数据,后面用了md5.





   '添加一个新用户
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim mysql As String
        Dim mycmd As OleDb.OleDbCommand
        Dim pwdmd5 As String
        '用md5加密密码字段
        pwdmd5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox2.Text, "MD5")
        If TextBox1.Text <> "" Or TextBox2.Text <> "" Or TextBox3.Text <> "" Then
            mysql = "insert into tab_admininfo(sname,spwd,spro) values ('" + TextBox1.Text + "','" + pwdmd5 + "','" + TextBox3.Text + "')"
            mycon.Open()
            mycmd = New OleDb.OleDbCommand(mysql, mycon)
            mycmd.ExecuteNonQuery()
            mycon.Close()
        Else
            Label4.Text = "请完整填写用户名、密码和权限"
        End If
        BindGrid()
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
    End Sub

本帖子中包含更多资源

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

x
4#
 楼主| 发表于 2006-8-14 09:22:00 | 只看该作者
【商品信息管理】
这里的编辑按钮是弹出另一个窗体以编辑,具体明天再说。


【小结】


       这个周末我们主要学习datagrid控件的用法。包括他的数据加载,格式的设定,添加命令列,分页功能,编辑功能等等,然后还有html<A>标签,html<table>标签的使用。

本帖子中包含更多资源

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

x
5#
发表于 2006-8-14 19:15:00 | 只看该作者
谢谢~
6#
发表于 2006-8-14 21:48:00 | 只看该作者
版主辛苦![em24]
7#
发表于 2006-8-18 03:57:00 | 只看该作者
全部另存为.
8#
发表于 2006-11-23 04:43:00 | 只看该作者
辛苦了!
9#
发表于 2008-12-14 23:30:15 | 只看该作者
感谢!!!!
10#
发表于 2009-12-13 20:04:16 | 只看该作者
级压群芳的无敌贴!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-10 17:17 , Processed in 0.099673 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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