从页面加载事件更改文本框的值,提交新值问题



我创建了一个表单来更新访问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

最新更新