Link to home
Start Free TrialLog in
Avatar of T Hoecherl
T HoecherlFlag for United States of America

asked on

Identify checkbox.checked = True in a datagridview

I have a datagridview that uses a SQL query as the data source.  The last column of the datagridview is a checkbox column.  The code to generate the window is this:

        Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand
        cmd.Connection = cn
        cmd.CommandType = CommandType.Text

        cmd.CommandText = "SELECT ORDER_NUMBER, LINE_NUMBER, QUANTITY, '' AS ADD_WINDOW FROM PCT_PROD_BATCHING WHERE STATUS = 0 ORDER BY ORDER_NUMBER, LINE_NUMBER"
        cmd.CommandTimeout = 0

        Dim dataAdapter As SqlDataAdapter = New SqlDataAdapter(cmd.CommandText, cn)
        dataAdapter.SelectCommand.CommandTimeout = 0
        Dim builder As SqlCommandBuilder = New SqlCommandBuilder(dataAdapter)
        Dim table = New DataTable
        table.Locale = System.Globalization.CultureInfo.InvariantCulture
        dataAdapter.SelectCommand.CommandTimeout = 0
        dgvAddWindow.AutoGenerateColumns = False


        dgvAddWindow.Columns.Add(New DataGridViewTextBoxColumn With {.DataPropertyName = "ORDER_NUMBER", .Name = "Order Number"})
        dgvAddWindow.Columns.Add(New DataGridViewTextBoxColumn With {.DataPropertyName = "LINE_NUMBER", .Name = "Line Number"})
        dgvAddWindow.Columns.Add(New DataGridViewTextBoxColumn With {.DataPropertyName = "QUANTITY", .Name = "Quantity"})
        dgvAddWindow.Columns.Add(New DataGridViewCheckBoxColumn With {.DataPropertyName = "ADD_WINDOW", .Name = "Add Window"})

        dataAdapter.Fill(table)
        AddWindowSource.DataSource = table
        dgvAddWindow.DataSource = AddWindowSource

After selecting rows by checking the checkboxes, and then clicking a Process button, I need to do two things:

1.  Count the number of checkboxes that have been checked.
2.  For each checkbox that has been checked, run some other processes.

I know how to run the other processes, but I don't know how to cycle through the rows and see if the DataGridViewCheckBoxColumn is checked.  Thanks for your help.

T
ASKER CERTIFIED SOLUTION
Avatar of Karrtik Iyer
Karrtik Iyer
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of T Hoecherl

ASKER

This is what I have for testing:

    Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click
        For Each row As DataGridViewRow In dgvAddWindow.Rows
            If Convert.ToBoolean(row.Cells("Add Window").Value) = True Then
                MsgBox("Checked")
            Else
                MsgBox("Not Checked")
            End If
        Next
        Exit Sub
 If the box is checked, I get the msgbox("Checked"), as expected.  But if the box is unchecked I get the attached error.

T
BooleanError.docx
I figured it out.  This is what I used:

        For i As Integer = 0 To dgvAddWindow.Rows.Count - 2
            If dgvAddWindow.Rows(i).Cells(3).Value.ToString() = "" Then
                x = x
            Else
                x = x + 1
            End If
        Next
 
Thanks.

T
The reason you got that error was when check box is not selected, the value expected while debugging for that column is 0, only then convert to boolean code shall work for both cases, when checked as well as unchecked. It seems in your current case for checked it is coming as 1,but for unchecked cases it is coming as empty string instead of 0.