2011-03-11 59 views
0
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 

ERROR:对象引用未设置为对象的实例..GridView的这个更新命令有什么问题?

+1

不要喊 - 关掉大写锁 – 2011-03-11 07:05:03

回答

0

的问题是在抛出异常的母牛。您可以调试您的代码来检查值或变量。

0

使用GridView的传统方式比您尝试的方式容易得多。这是在.aspx文件,而不是代码隐藏:

<asp:GridView ID="myGV" DataSourceID="myDS" runat="server"/> 
<asp:SqlDataSource ID="myDS" SelectCommand="..." UpdateCommand="..." runat="server"/> 
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后检查它们的值。

希望这会有帮助