Я подвергаю сомнению ваш комментарий… »щелчок заголовка завершает действие правильно, за исключением любой выбранной ячейки / строки:« … Я согласен с частью о том, что «выбранная» ячейка не переключается.Однако я не согласен с «завершением действия правильно».
Мой тест, выполняющий опубликованный код, показывает, что при нажатии «любой» заголовок столбца «в первый раз» все флажки будут установлены на флажки.Затем любые последующие щелчки в столбце «любой» просто переключат «все» строки на одно и то же значение.То есть после первого щелчка по столбцу все флажки будут одинаковыми.Похоже, вы можете сделать это более сложным, чем должно быть.
Проблема, связанная с тем, что «выбранная» ячейка не переключается, является правильной.Очевидно, что, если ячейка выбрана, ее значение не переключается.Простое решение может состоять в том, чтобы «отключить» сетку перед этим процессом и «включить» ее после переключения.Это зависит от того, есть ли другие возможные события, «ищущие» изменение значения ячейки и т. Д.…
Без подробного описания того, что делают переменные checkCount
и rowsCount
, я чувствую, что оба не нужны для цели,Кроме того, как я уже говорил ранее, текущий код OP «переключает» значения при нажатии на «любой» столбец.Я могу только предположить, что это не то, что нужно.
Одно из возможных решений размещено ниже.Сначала выполняется проверка, чтобы убедиться, что выбран правильный «столбец» (chkColumn).Если щелкнуть «chkColumn», DataGridView
dgv
временно отключается, и цикл начинается по всем строкам сетки.Простое решение «переключить» Boolean
состоит в том, чтобы принять его отрицание.Это то, что делает код ниже ... значение каждого флажка устанавливается в «противоположное» от его текущего значения.
Возможная проблема с этим подходом может возникнуть из-за того, «как» сетка получает свои данные.Для некоторых источников данных вам может понадобиться другой подход.Надеюсь, это поможет.
Private Sub dgv_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgv.ColumnHeaderMouseClick
If (dgv.Columns(e.ColumnIndex).Name = "chkColumn") Then
dgv.Enabled = False
For Each row As DataGridViewRow In dgv.Rows
If (Not row.IsNewRow) Then
row.Cells("chkColumn").Value = Not (row.Cells("chkColumn").Value)
End If
Next
dgv.Enabled = True
End If
End Sub