Замена десятичного разделителя при обновлении ячейки DataGridView - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть DataGridView, где пользователь обновляет некоторые количества и цены в базе данных. Проблема в том, что иногда пользователь может использовать "." вместо "," для десятичного разделителя, и это портит данные в базе данных (например, когда пользователь вводит "2.7", после того как он покидает cell, оставшееся значение "27"). До сих пор я пытался использовать события CellValidating и CellValueChanged, но не смог решить свою проблему. (код ниже, сначала от CellValidating, второй от CellValueChanged)

'CellValidating
If e.FormattedValue.ToString().Contains(".") Then
     DataGridViewSample(e.ColumnIndex, e.RowIndex).Value.ToString().Replace(".", ",")
End If

'CellValueChanged
If DataGridViewSample(e.ColumnIndex, e.RowIndex).Value.ToString().Contains(".") Then
     DataGridViewSample(e.ColumnIndex, e.RowIndex).Value.ToString().Replace(".", ",")
End If

Прошу прощения, если мой запрос кажется глупым, но меня просят предотвратить такого рода "ошибку" пользователя. Я хотел бы программно заменить "." на "," или сделать обновление таким образом, чтобы компилятор считал "." "," (другие способы решения этой проблемы также принимаются). Любой совет был бы отличным, хорошего дня!

1 Ответ

0 голосов
/ 07 сентября 2018

Для этого решения не используйте форматы.

Вам необходимо использовать объект текстового поля из ячейки:

'This will represent the content of the cell
Dim editBox As TextBox = Nothing

В событии EditingControlShowing из вашей таблицы данных вам нужно получить объект textbox и добавить событие keyDown:

Private Sub DataGridView1_EditingControlShowing(sender As Object, e As 
DataGridViewEditingControlShowingEventArgs) Handles 
DataGridView1.EditingControlShowing
    'Put the column index of the cell
    If DataGridView1.CurrentCell.ColumnIndex = 2 Then
        If TryCast(e.Control, TextBox) IsNot Nothing Then
            editBox = DirectCast(e.Control, TextBox)

            'Removing and then adding the keyDown event in the cell
            RemoveHandler e.Control.KeyDown, AddressOf Cell_KeyDown
            AddHandler e.Control.KeyDown, AddressOf Cell_KeyDown
        End If

    End If
End Sub


Private Sub Cell_KeyDown(sender As Object, e As KeyEventArgs)
    'To commit the changes of the cell
    DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
End Sub

Затем в событии cellLeave снова внесите изменения в ячейку, замените "." на "," и установите значение textbox:

Private Sub DataGridView1_CellLeave(sender As Object, e As DataGridViewCellEventArgs) 
Handles DataGridView1.CellLeave
    If DataGridView1.CurrentCell.ColumnIndex = 2 And DataGridView1.CurrentCell.Value IsNot Nothing Then
        DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
        DataGridView1.CurrentCell.Value = DataGridView1.CurrentCell.Value.ToString.Replace(".", ",")
        editBox.Text = DataGridView1.CurrentCell.Value
    End If
End Sub

Наконец, в CellEndEdit введите код для сохранения данных в вашей базе данных.

Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
    'Code to save in database here...
End Sub

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...