就如同我在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作者: 情比金坚 时间: 2006-8-14 09:16
【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作者: 情比金坚 时间: 2006-8-14 09:20
【系统用户管理】
'添加一个新用户
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 作者: 情比金坚 时间: 2006-8-14 09:22
【商品信息管理】[attach]19741[/attach]
这里的编辑按钮是弹出另一个窗体以编辑,具体明天再说。