0

一直在尝试更新 GridView 中的字段,但没有成功尝试。这是我得到Object reference not set to an instance of an object的错误。它一直在这条线上打破dt.Rows(row.DataItemIndex)("TicketID") = (CType(row.FindControl("TicketID"), TextBox)).ToString作为一个初学者,我不知道如何解决这个问题。任何帮助深表感谢。

代码隐藏:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim dt As New DataTable("historyList")

    dt.Columns.Add("TicketID", GetType(Integer))
    dt.Columns.Add("DateCreated", GetType(DateTime))
    dt.Columns.Add("FullName", GetType(String))
    dt.Columns.Add("TicketType", GetType(String))
    dt.Columns.Add("Subject", GetType(String))
    dt.Columns.Add("Message", GetType(String))
    dt.Columns.Add("Status", GetType(String))

    For i = 0 To 6
        Dim tableRow = dt.NewRow()
        tableRow("TicketID") = i
        tableRow("DateCreated") = Now()
        tableRow("FullName") = i.ToString()
        tableRow("TicketType") = i.ToString()
        tableRow("Subject") = i.ToString()
        tableRow("Message") = i.ToString()
        tableRow("Status") = i.ToString()
        dt.Rows.Add(tableRow)
    Next

    Session("dt") = dt

    BindData()

End Sub

Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs)
    GridView1.EditIndex = e.NewEditIndex
    BindData()
End Sub
Protected Sub GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As GridViewCancelEditEventArgs)
    GridView1.EditIndex = 1
    BindData()
End Sub

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
    Dim dt = CType(Session("dt"), DataTable)

    'if your current DataSource be in Session
    Dim row As GridViewRow = GridView1.Rows(e.RowIndex)

    dt.Rows(row.DataItemIndex)("TicketID") = (CType(row.FindControl("TicketID"), TextBox)).ToString
    dt.Rows(row.DataItemIndex)("DateCreated") = (CType(row.FindControl("DateCreated"), TextBox)).ToString
    dt.Rows(row.DataItemIndex)("FullName") = (CType(row.FindControl("FullName"), TextBox)).ToString
    dt.Rows(row.DataItemIndex)("TicketType") = (CType(row.FindControl("TicketType"), TextBox)).ToString
    dt.Rows(row.DataItemIndex)("Subject") = (CType(row.FindControl("Subject"), TextBox)).ToString
    dt.Rows(row.DataItemIndex)("Message") = (CType(row.FindControl("Message"), TextBox)).ToString
    dt.Rows(row.DataItemIndex)("Status") = (CType(row.FindControl("Status"), TextBox)).ToString

    Session("dt") = dt
    GridView1.EditIndex = 1
    BindData()

End Sub

Private Sub BindData()

    'GridView1.DataSource = Session("dt")
    GridView1.DataBind()

End Sub
4

1 回答 1

0

可能是因为 FindControl 方法返回的是空引用(如果我没记错的话,我说的nothing是 VB 中的值)。这意味着控件没有存储在行中,所以检查一下。

于 2013-06-07T21:06:38.337 回答