Hi, I'm trying to cache user's input avail through gridview paging. I receive error System.NullReferenceException was unhandled by user code
Message="Object reference not set to an instance of an object." Any thought is appreciated. Thank you in advance.

When I walked through CacheData, it seems to cache the data just fine. However, sd is empty.

Code:
 Private Sub CacheData()
        Dim row As GridViewRow
        Dim sd1 As New StringDictionary
        Dim count As Integer = 0
        For Each row In GridView1.Rows
            Dim txtRoomNum As TextBox = CType(row.FindControl("RoomNumber"), TextBox)
            Dim lblID As Label = CType(row.FindControl("RetreatantID"), Label) 'a way to identify the row, I use primary key. This would be a template column
            sd1.Add(lblID.Text, txtRoomNum.Text)
        Next

        Dim index As String = GridView1.PageIndex
        Cache.Insert("cachedRMAssignValues" & index, sd1)
    End Sub

    Private Sub setCachedEdit()
        Dim sd As StringDictionary = Cache.Get("cachedRMAssignValues" & GridView1.PageIndex)
        Dim de As New DictionaryEntry
        Dim r As GridViewRow

        If sd.Count > 0 Then 
            For Each de In sd
                For Each r In GridView1.Rows
                    Dim txtRoomNum As TextBox = CType(r.FindControl("RoomNumber"), TextBox)
                    Dim lblID As Label = CType(r.FindControl("RetreatantID"), Label)
                    Dim index As String = GridView1.PageIndex
                    If lblID.Text = de.Key Then
                        txtRoomNum.Text = de.Value
                    End If
                Next
            Next
        End If
    End Sub
Here's my GridView Paging:

Code:
 Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
        Dim rpData As New clsACData
        Dim groupID As String = Session("groupID")
        If GridView1.EditIndex <> -1 Then
            e.Cancel = True
        End If

        If (dlSearchOptions.SelectedValue = "recruiter name" Or dlSearchOptions.SelectedValue = "retreatant name" Or dlSearchOptions.SelectedValue = "retreatant not assigned a room" Or dlSearchOptions.SelectedValue = "special needs") Then
            CacheData()
            GridView1.PageIndex = e.NewPageIndex
            GridView1.DataSource = SortDataTable(rpData.RetreatantsForRMAssign(getSearchOptions(), getInput(), groupID), True)
            GridView1.DataBind()
            setCachedEdit()

        ElseIf (dlSearchOptions.SelectedValue = "registration status") Then
            CacheData()
            GridView1.DataSource = SortDataTable(rpData.RetreatantsForRMAssign(getSearchOptions(), getRegStatus(), groupID), True)
            GridView1.PageIndex = e.NewPageIndex
            GridView1.DataBind()
            setCachedEdit()

        ElseIf (dlSearchOptions.SelectedValue = "building") Then
            CacheData()
            GridView1.DataSource = SortDataTable(rpData.RetreatantsForRMAssign(getSearchOptions(), getRegBuilding(), groupID), True)
            GridView1.PageIndex = e.NewPageIndex
            GridView1.DataBind()
            setCachedEdit()

        End If