Показать флажок MessageBox на Datagridview перед проверкой или снятием отметки
Как показать msgbox перед обновлением флажка в datagridview?
Допустим, у меня есть строка с флажком в Datagridview, и его значение равно True(проверено), и я нажму на него. Как я могу показать что-то подобное в первую очередь?
"Вы уверены, что хотите снять этот флажок? Да или нет"
Да = снять отметку
Нет = Все тот же (проверено)
вот мой код с выводом, я хочу, но он не работает
Private Sub DataGridView3SelectAll_CurrentCellDirtyStateChanged(
ByVal sender As Object,
ByVal e As EventArgs) Handles DataGridView3.CurrentCellDirtyStateChanged
RemoveHandler DataGridView3.CurrentCellDirtyStateChanged,
AddressOf DataGridView3SelectAll_CurrentCellDirtyStateChanged
If TypeOf DataGridView3.CurrentCell Is DataGridViewCheckBoxCell Then
DataGridView3.EndEdit()
Dim Checked As Boolean = CType(DataGridView3.CurrentCell.Value, Boolean)
Dim xx As String
xx = MsgBox("Are you sure you want to save changes?", vbYesNo)
If xx = vbYesNo Then
If Checked = True Then
Dim s As String = (DataGridView3.Columns(DataGridView3.CurrentCell.ColumnIndex).DataPropertyName)
Dim x As Integer
x = DataGridView3.CurrentCell.RowIndex
Dim con1 As MySqlConnection = New MySqlConnection("datasource=192.168.2.87;database=inventory;userid=root;password=admin1950")
Dim cmdinsert As MySqlCommand = New MySqlCommand("update stock_issuance set `" & s & "` = 1 where `" & s & "` = `" & s & "` and Month = '" & DataGridView3.Rows(x).Cells(1).Value & "'", con1)
con1.Open()
cmdinsert.ExecuteNonQuery()
con1.Close()
ElseIf Checked = False Then
Dim s As String = (DataGridView3.Columns(DataGridView3.CurrentCell.ColumnIndex).DataPropertyName)
Dim x As Integer
x = DataGridView3.CurrentCell.RowIndex
Dim con1 As MySqlConnection = New MySqlConnection("datasource=192.168.2.87;database=inventory;userid=root;password=admin1950")
Dim cmdinsert As MySqlCommand = New MySqlCommand("update stock_issuance set `" & s & "` = 0 where `" & s & "` = `" & s & "` and Month = '" & DataGridView3.Rows(x).Cells(1).Value & "'", con1)
con1.Open()
cmdinsert.ExecuteNonQuery()
con1.Close()
End If
Else
End If
End If
AddHandler DataGridView3.CurrentCellDirtyStateChanged,
AddressOf DataGridView3SelectAll_CurrentCellDirtyStateChanged
End Sub
2 ответа
Вы можете сначала установить ReadOnly
свойство столбца для True
, затем справиться CellContentClick
событие DataGridView
сюда:
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, _
ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
If (e.ColumnIndex = 0 AndAlso e.RowIndex >= 0) Then
Dim result = MessageBox.Show("Check Item?", "", MessageBoxButtons.YesNoCancel)
If (result = System.Windows.Forms.DialogResult.Yes) Then
DataGridView1(e.ColumnIndex, e.RowIndex).Value = True
Else
DataGridView1(e.ColumnIndex, e.RowIndex).Value = False
End If
End If
End Sub
Сделать колонку ReadOnly
Вы можете использовать как код, так и дизайнер.
Чтобы получить подтверждение только при снятии отметки с ячейки:
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, _
ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
If (e.ColumnIndex = 0 AndAlso e.RowIndex >= 0) Then
Dim value = DirectCast(DataGridView1(e.ColumnIndex, e.RowIndex).FormattedValue, _
Nullable(Of Boolean))
If (value.HasValue AndAlso value = True) Then
Dim result = MessageBox.Show("Are you sure to uncheck item?", "", _
MessageBoxButtons.YesNoCancel)
If (result = System.Windows.Forms.DialogResult.Yes) Then
DataGridView1(e.ColumnIndex, e.RowIndex).Value = False
End If
Else
DataGridView1(e.ColumnIndex, e.RowIndex).Value = True
End If
End If
End Sub
Обрабатывать CellValidating
событие. Затем, если это ваша колонка, всплывающее окно msgbox
, Если они хотят отменить изменение, установите e.Cancel=true
Private Sub dgv_CellValidating(sender As Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgv.CellValidating
If dgv.Columns(e.ColumnIndex) Is myCheckboxColumn Then
If DialogResult.Yes <> MessageBox.Show("Are you sure", "?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) Then
e.Cancel = True
End If
End If
End Sub