Imports System.Data.SqlClient
Dim constr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;Integrated Security=True;User Instance=True"
Protected Sub GridView1_RowUpdated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdatedEventArgs) Handles GridView1.RowUpdated
For Each myRow As GridViewRow In GridView1.Rows
'Find the checkbox
Dim lab1 As Label = DirectCast(myRow.FindControl("Label1"), Label)
Dim lab4 As Label = DirectCast(myRow.FindControl("Label4"), Label)
Try
Using conn = New SqlConnection(constr)
Using cmd = conn.CreateCommand()
conn.Open()
Dim sql As String = "UPDATE a1_volvo SET travel = @travel WHERE travelid = @travelid"
cmd.CommandText = sql
cmd.Parameters.AddWithValue("@travel", lab4.Text)
cmd.Parameters.AddWithValue("@travelid", lab1.Text)
cmd.ExecuteNonQuery()
End Using
End Using
Catch ex As Exception
Response.Write(ex.Message)
End Try
Next
End Sub
错误:对象引用未设置为对象的实例..
答案 0 :(得分:0)
问题在于抛出异常的行。您可以调试代码以检查值或变量。
答案 1 :(得分:0)
使用GridView的传统方式比您尝试的方法容易得多。这是一个.aspx文件,而不是代码隐藏:
<asp:GridView ID="myGV" DataSourceID="myDS" runat="server"/>
<asp:SqlDataSource ID="myDS" SelectCommand="..." UpdateCommand="..." runat="server"/>
答案 2 :(得分:0)
你的问题是
Dim lab1 As Label = DirectCast(myRow.FindControl("Label1"), Label)
或
Dim lab4 As Label = DirectCast(myRow.FindControl("Label4"), Label)
或同时使用。
可能会发生的情况是,当您分配lab1或lab4时,它没有获取任何值,然后当您尝试分配sql命令参数并给出lab4.Text
的值时,如果lab4本身为空,它会抛出`对象引用未设置为对象异常的实例。
但这只是猜测。为了了解forsure,您需要设置断点并调试应用程序。在调试时,请在分配后检查lab1和lab4的值。
希望这有帮助