2013-06-07 17 views
0

GridView에서 필드를 업데이트하려고 시도했지만 시도가 성공하지 못했습니다. 이것은 내가 가진 오류입니다 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. 이 줄을 계속 깨고있다. dt.Rows(row.DataItemIndex)("TicketID") = (CType(row.FindControl("TicketID"), TextBox)).ToString 초심자 인 나는 이것을 어떻게 고쳐야할지 모른다. 어떤 도움이라도 대단히 감사합니다. 코드 숨김NullReferenceException - 필드 업데이트 필요

:

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 
+0

'rows.DataItemIndex'의 값이 데이터 테이블의 유효한 색인인지 확인하십시오. –

+0

@JoelCoehoorn : 사실, MSDN 예제에서'rows.DataItemIndex'를 사용했습니다. – Esther

답변

0

FindControl 메서드가 null 참조를 반환하기 때문에 그것은 아마 (내가 정확히 기억한다면, 나는 VB에서 nothing 값에 대해 이야기하고있다). 컨트롤이 행에 저장되지 않는다는 것을 의미하므로 확인하십시오.

+0

vb.net에서는 괄호없이 인수없이 호출 메서드를 사용할 수 있습니다. –

+0

감사합니다. .NET은 하루 하루를 보냈지 만, 나는 여러 해 동안 VB에 손대지 않았습니다. 편집 중. – Renan

+0

@Renan : ToString을 호출 할 때마다 괄호가 추가 되었으나 작동하지 않았습니다. 같은 오류 메시지. 그런 다음 .ToString()을 .Text로 변경해 보았습니다. 행운도 없습니다. 컨트롤이 행에 저장되어 있지 않으면 FindControl을 대체 할 다른 방법이 있습니까? – Esther