powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DataGridView.endedit() не работает
3 сообщений из 3, страница 1 из 1
DataGridView.endedit() не работает
    #39341164
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, не могу разобраться с проблемой DataGridView.
Для того, чтобы реализовать свой переход в DataGridView по нажатию клавиши Enter (отменить переход на следующую строку), создал свой класс, наследованный от DataGridView следующим образом.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public NotInheritable Class DGW_cls
    Inherits DataGridView

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
        If keyData = Keys.Enter Then
            Me.OnKeyPress(New KeyPressEventArgs("r"c))
            Return True
        Else
            Select Case keyData
                Case Keys.D1, Keys.D2, Keys.D3, Keys.D4, Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9, Keys.D0,
                     Keys.NumPad0, Keys.NumPad1, Keys.NumPad2, Keys.NumPad3, Keys.NumPad4, Keys.NumPad5, Keys.NumPad6, Keys.NumPad7, Keys.NumPad8, Keys.NumPad9,
                     Keys.Back, Keys.Delete
                    Return False
                Case Else
                    Return True

            End Select
        End If

    End Function

End Class

.
В DataGridView реализован следующий функционал:
при вводе в ячейку числового значения и нажатию клавиши Enter отрабатывает хранимая процедура, которая ищет значение в БД (select from) и при наличии такой записи, её значение прописывается в другой ячейке DataGridView этой же строки, а при отсутствии- ячейку, в которую вводили, нужно очистить.

Этот функционал реализован с помощью следующего кода:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Friend Sub DGW_KeyPress(sender As Object, e As KeyPressEventArgs)
        Dim dgv As DataGridView = TryCast(sender, DataGridView)
        Dim cell As DataGridViewCell = dgv.CurrentCell

        ch = 0

        If e.KeyChar = "r"c Then
            dgv.Update()
            dgv.EndEdit()

            If cell.IsInEditMode And sender.currentcell.columnindex = 1 Then
                Dim a As New adodb_con
                Dim str As String

                str = a.proc_xp("get_descr_by_nomenkl", dgv.CurrentRow.Cells(1).Value.ToString)
                If Len(str) <> 0 Then
                    dgv.CurrentRow.Cells(2).Value = str
                    dgv.CurrentCell = dgv.Rows(dgv.CurrentRow.Index).Cells(3)
                    mfr.st_label.Text = ""
                    mfr.st_label.ForeColor = Color.Black

                    ch = 1
                Else


                    dgv.CurrentRow.Cells(1).Value = ""
                    dgv.CurrentCell = dgv.CurrentRow.Cells(3)
                    dgv.CurrentCell = dgv.CurrentRow.Cells(1)


                    ' dgv.EndEdit()

                    mfr.st_label.Text = "Нет данных по введенному номенклатурному номеру!"
                    mfr.st_label.ForeColor = Color.Red

                End If

            End If

            If sender.currentcell.columnindex = 3 And ch = 0 And IsNumeric(dgv.CurrentCell.Value) Then
                dgv.CurrentCell = sender.rows(dgv.CurrentRow.Index + 1).Cells(1)
            End If
        End If

    End Sub



Проблема в следующем:
Если в коде просто прописать
Код: vbnet
1.
 dgv.CurrentRow.Cells(1).Value = ""

то ввиду того, что ячейка находится в режиме редактирования изменения не вносятся и ячейка не очищается. Чтобы изменения вступили в силу, нужно выйти из ячейки и снова зайти в неё.
Код: vbnet
1.
dgv.EndEdit()

не помогает видимо ввиду того, что DataGridView пользовательский. Как можно обойти этот костыль?
...
Рейтинг: 0 / 0
DataGridView.endedit() не работает
    #39341295
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vb_sub

Класс-то зачем городили? Можно просто отслеживать нажатие
...
Рейтинг: 0 / 0
DataGridView.endedit() не работает
    #39341474
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,
При редактировании значения в ячейке DataGridView, события DataGridView.KeyPress, DataGridView.KeyDown не срабатывают.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DataGridView.endedit() не работает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]