在VB.Net中捕获DataGridView CheckBox的值

时间:2010-08-09 12:02:28

标签: vb.net

我有一个datagridview(未绑定)。字段是名称,姓氏和电话号码以及复选框列。

DataGridView中有十行。

有一个OK按钮

我需要获取显示用户已检查过哪些行的消息。当用户单击“确定”按钮时,应显示该消息。可能有几条消息,在一个循环中逐个检查每一行。

我无法收到此消息。我尝试按下OK按钮中的代码:

Dim strCB As String = dgvChooseQs.Rows(0).Cells(3).Value.ToString

Cell(3)是我的复选框。不要考虑行(0),目前我只是检查第0行的值

感谢您的帮助。

Furqan

7 个答案:

答案 0 :(得分:2)

不要使用单元格索引。您的复选框列必须具有名称,因此您应该使用它。

否则,您想要做的就是这样


For each oRow as DataGridViewRow in dgvChooseQs.Rows

   If oRow.Cells("ColNamE").Value = True then
    'do whatever you need to do.
   End if

Next

如果您觉得需要强制转换列,则可以使用CType,但类型为DataGridViewCheckBoxCell,而不是CheckBox。

答案 1 :(得分:1)

你需要做这样的事情:

if ctype(dgvChooseQs.Rows(0).findcontrol("whateverYourCheckBoxIsNamed"), checkbox).checked then 

'throw the message

end if

答案 2 :(得分:1)

您可以将单元格值转换为布尔值,然后检查它,如下所示:

Dim RowIndex As Integer = ...
Dim ColumnIndex As Integer = ...

Dim IsTicked As Boolean = CBool(DataGridView1.Rows(RowIndex).Cells(ColumnIndex).Value)

If IsTicked Then
    MessageBox.Show("You ticked the box.")
Else
    MessageBox.Show("You cleared the box.")
End If

答案 3 :(得分:1)

只有第三个示例对我有用,但是我必须添加一个计时器

Private Sub DgvElencoFile_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DgvElencoFile.CellClick

    'Variabili gestione programma
    Dim numerocolonnaSelezionata As Integer
    Dim numeroColonnaSelezionataPerDowonload As Integer
    Dim numeroRigaSelezionata As Integer

    numeroRigaSelezionata = e.RowIndex
    NumerocolonnaSelezionata = e.ColumnIndex

    If NumeroRigaSelezionata < 0 Then
        ClaFunzSgnSon.SegnaleSonoro(ClaFunzSgnSon.EnTipoSgnSon.ErroreImpostazioneDati)
        GoTo FineSubFunz
    End If
    numeroColonnaSelezionataPerDowonload = -1

    If DgvElencoFile.Rows(numeroRigaSelezionata).Cells(ClnDownLoad.Name).Selected Then numeroColonnaSelezionataPerDowonload = numerocolonnaSelezionata

    If numeroColonnaSelezionataPerDowonload >= 0 Then
        TimVisCheckDownLoad.Start()
    End If

FineSubFunz: 结束

私有子TimVisCheckDownLoad_Tick(发送方为对象,e为EventArgs)处理TimVisCheckDownLoad.Tick TimVisCheckDownLoad.Stop()

    Dim isTickedOn = CBool(DirectCast(DgvElencoFile.CurrentCell, DataGridViewCheckBoxCell).EditingCellFormattedValue)

    If isTickedOn Then
        MessageBox.Show("You ticked the box.")
    Else
        MessageBox.Show("You cleared the box.")
    End If

End Sub

答案 4 :(得分:0)

我找到了一个简单的解决方案。

单击单元格后,只需更改单元格焦点。

Private Sub DGV_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGV.CellContentClick
    If e.ColumnIndex = "Here checkbox column id or name" Then
        DGV.Item(e.ColumnIndex, e.RowIndex + 1).Selected = True
        'Here your code
        MsgBox DGV.Item(e.ColumnIndex, e.RowIndex).Value
    End If
End Sub

不要忘记检查(ckeckbox + 1)索引的列是否存在。

答案 5 :(得分:0)

将dataGridView中的网格类型设置为“DataGridViewCheckBoxXColumn”而不是DataGridViewCheckBoxColumn。

所有问题都将得到解决

答案 6 :(得分:0)

该帖子很旧,但可以帮助您: 投射单元格后,您具有以下三个属性:

Private Sub YourDataGridView_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles YourDataGridView.CellMouseClick

    Dim b, b1, b2 As Boolean
    b = DirectCast(YourDataGridView.CurrentCell, DataGridViewCheckBoxCell).EditingCellValueChanged
    b1 = CBool(DirectCast(YourDataGridView.CurrentCell, DataGridViewCheckBoxCell).EditingCellFormattedValue)
    b2 = CBool(DirectCast(YourDataGridView.CurrentCell, DataGridViewCheckBoxCell).EditedFormattedValue)
End Sub