Khamey
Khamey

Reputation: 491

Visual Basic ASP.NET Not Reading Unchecked Checkbox Properly

I have a web application that reads from a SQL database to create a gridview. From this gridview I want to select some data and transfer it back to another page via session variable. I have tried to create continuity by checking the boxes previously selected, but if I uncheck them and send the information back, the unchecked box remains in the session variable data.

This is the code that checks the session variable and checks boxes accordingly.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim String1 As String = ""
    Dim String2 As String = ""
    Dim boolcheck As Boolean = False
    For Each row As DataRow In employeelist.Rows
        String1 = row.Item(0)
        For Each row2 As GridViewRow In EmployeeListGridView.Rows
            String2 = row2.Cells(1).Text
            If String1 = String2 Then
                Dim checkRow As CheckBox = TryCast(row2.Cells(0).FindControl("checkRow"), CheckBox)
                checkRow.Checked = True
            End If
        Next
    Next
End Sub

This is the code that stores a datatable to the session variable

Protected Sub SelectButton_Click(sender As Object, e As EventArgs) Handles SelectButton.Click
    Dim dt As New DataTable()
    dt.Columns.AddRange(New DataColumn() {New DataColumn("ZID"), New DataColumn("Last Name")})
    For Each row As GridViewRow In EmployeeListGridView.Rows
        If row.RowType = DataControlRowType.DataRow Then
            Dim checkRow As CheckBox = TryCast(row.Cells(0).FindControl("checkRow"), CheckBox)
                If checkRow.Checked Then
                Dim zid As String = row.Cells(1).Text
                Dim lastname As String = row.Cells(3).Text
                dt.Rows.Add(zid, lastname)
            End If
        End If
    Next

    Session("employeedt") = dt
    Response.Redirect("ManagerTraining.aspx")
End Sub

If a box is checked on page load from the first bit of code, unchecked by the user, the second piece of code will step into the "If checkRow.checked" statement even though the user has unchecked that box. The checkboxes are contained in a gridview. I am using ASP.NET and VB. I feel like the changes aren't being committed if the user unchecks.

Upvotes: 0

Views: 494

Answers (1)

Dan Drews
Dan Drews

Reputation: 1976

Please read about the ASP.NET lifecycle.

Page.Load always executes before the event handlers on postback. You should wrap the code setting the checkbox values in

If not isPostback Then
   Dim checkRow As CheckBox = TryCast(row2.Cells(0).FindControl("checkRow"), CheckBox)
   checkRow.Checked = True
End If

Upvotes: 2

Related Questions