我创建了一个表单来更新访问DB表。我的问题是,当文本框中的文本被更改并提交表单时,.text
值与datareader
在页面加载事件上加载它们时保持相同。我如何提交用户更新的值,而不是页面加载时已经存在的值。
Public Property vehicleid As Integer
Public Property connstring As String = "myconnectionstring..."
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
vehicleid = Integer.Parse(Request.QueryString("vehicID"))
Dim svEnterdate, stocknum, make, model, color As String
Dim conn As New OleDbConnection(connstring)
Dim sql As String = "select * from vehicle where vehicleid=@vid"
Dim cmd As New OleDbCommand(sql, conn)
cmd.Parameters.AddWithValue("@vid", vehicleid)
conn.Open()
Dim dr As OleDbDataReader = cmd.ExecuteReader
While dr.Read
svEnterdate = dr("enterdate").ToString()
stocknum = dr("stock_num").ToString()
make = dr("make").ToString()
model = dr("model").ToString()
color = dr("color").ToString()
End While
conn.Close()
EnterDateTXT.Text = svEnterdate
StockNumTXT.Text = stocknum
MakeTxt.Text = make
ModelTXT.Text = model
ColorTxt.Text = color
End Sub
'inbetween these 2 events the user can manipulate all the controls .text values, yet the
' .text values of the submitted controls below are the same as the ones filled by the
'datareader
Protected Sub SubmitBTN_Click(ByVal sender As Object, ByVal e As EventArgs) Handles SubmitBTN.Click
Dim conn As New OleDbConnection(connstring)
Dim sql As String = "UPDATE Vehicle" & _
" SET stock_num=@stock, make=@make, model=@model, color=@color, enterdate=@enter " & _
"WHERE vehicleid=@vid"
Dim cmd As New OleDbCommand(sql, conn)
cmd.Parameters.AddWithValue("@vid", vehicleid)
cmd.Parameters.AddWithValue("@stock", StockNumTXT.Text)
cmd.Parameters.AddWithValue("@make", MakeTxt.Text)
cmd.Parameters.AddWithValue("@model", ModelTXT.Text)
cmd.Parameters.AddWithValue("@color", ColorTxt.Text)
cmd.Parameters.AddWithValue("@enter", EnterDateTXT.Text)
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
End Sub
在页面加载代码中,Check For Post back
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
' Write your code to read data from database here
End
End Sub
如果你没有在页面加载事件中检查回发,每次当你点击提交按钮时,它将首先执行页面加载中的代码(再次将内容加载到文本框中)。因此,无论你在文本框中输入什么,都会被数据库的内容覆盖,并再次保存到数据库中。
来理解这个。在Page_load事件代码中放置一个断点,在按钮单击事件代码中放置另一个断点。现在在文本框中输入一些值,然后单击按钮,查看页面加载中的代码块是否正在执行。
检查page_load中的Postback检查将解决这个问题。
http://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback.aspx