Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2012, 23:25   #1
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию В DataGridView не срабатывает OnKeyPress

При вводе в ячейки DataGridView не откликается обработчик события KeyPress (везде установлено ReadOnly=false). Я хотел обрабатывать каждый символ на предмет, является ли он цифрой или запятой,- и наткнулся на это странное явление. Может быть, кто-то уже сталкивался с этим и знает, в чём дело?
Гаврилов вне форума Ответить с цитированием
Старый 17.05.2012, 22:10   #2
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Уточняю:
Стандартные события KeyDown и KeyPress относятся ко всему DataGridView, а мне нужно отловить срабатывание аналогичных событий при вводе значения от руки в ячейку определенной колонки. При вводе в ячейку, оказывается, эти события не происходят. Может, кто-нибудь посоветует, как быть?
Гаврилов вне форума Ответить с цитированием
Старый 17.05.2012, 22:19   #3
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Обрабатывать надо в соурсе. Откуда данные в DataGridView?
=master= вне форума Ответить с цитированием
Старый 18.05.2012, 00:02   #4
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Старые данные берутся из таблиц DataSet (из базы данных или из XML фалов данных), потом некоторые из них подлежат редактированию в DataGridView и туда же от руки вводятся новые. Это вспомогательный небольшой DataGridView, основные я не позволяю редактировать "по живому", они read-only.
Когда Вы советуете обрабатывать в source, Вы имеете в виду, что данные DataGridView надо ассоциировать с DataView и править DataView?
Т.е. создать dataTable, заполнить её из базы, связать с DataGridView: dataGrid.DataSource = dataTable.AsDataView(); и во время ввода в DataGridView проверять посимвольно соответствующее поле в dataGrid.DataSource ?

Последний раз редактировалось Гаврилов; 18.05.2012 в 00:07.
Гаврилов вне форума Ответить с цитированием
Старый 18.05.2012, 00:10   #5
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Что значит попадают, вы их как в грид выводите?
=master= вне форума Ответить с цитированием
Старый 18.05.2012, 09:59   #6
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

В моих текстах нет ни одного слова "попадают".
Методы ввода данных в ячейки DataGridView я только что подробно объяснил. Я просто не знаю, что можно ещё добавить к этому.
Итак, что Вы имеете в виду, когда советуете: "Обрабатывать надо в соурсе"?

Последний раз редактировалось Гаврилов; 18.05.2012 в 10:06.
Гаврилов вне форума Ответить с цитированием
Старый 18.05.2012, 10:27   #7
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Если надо не позволять вводить данные в определенные ячейки, то проще не отслеживать вводимые данные, а сделать маску ввода (н-р, RegEx) или повесить эдитор и обратывать его события, а не события всего грида.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 18.05.2012, 12:37   #8
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Программный комплекс пишется на C# в среде MS Visual Studio.
Маску ввода я сейчас как раз использую ("N2" или "#,##0.00") но она может быть применена лишь по окончании ввода в событиях CellValidating, CellEndEdit или CellLeave. А хотелось бы не допускать ввода нецифровых символов ВО ВРЕМЯ ввода - вот я и попытался использовать событие KeyPress, но безуспешно: оказалось, что оно не относится к ячейкам (!?)
Конечно, гораздо проще было бы не морочить никому, и себе в том числе, голову и просто сделать DataGrid "ReadOnly", а вводить данные в отдельные поля TextBox - вот там прекрасно контролируется каждый вводимый символ при помощи последовательного применения обработчиков OnKeyDown и OnKeyPress. Но пришлось бы для этого создавать специальное модальное окно для ввода/редактирования строк датагрида, что противоречит принятому мной принципу редактировать всю таб-страницу сразу, включив режим её редактирования, при котором некоторые (нужные по смыслу) находящиеся в нём мои юзер-контролы переключаются с режима "Read" на режим "Edit" и обратно.
Видимо, придётся всё-таки использовать CellValidating, который, кстати, и не всегда срабатывает (например, при сохранении данных, когда курсор остался в поле), но что-нибудь придумаю, принудительный вызов CellLeave или имитацию нажатия Enter.
Гаврилов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OnKeyPress ... Vova777 Общие вопросы Delphi 31 18.10.2015 12:10
onkeypress WerDinG Помощь студентам 0 18.11.2011 21:28
OnKeyPress VS Edit1 :) Federal Помощь студентам 6 29.07.2010 16:00
OnKeyPress aurora_87 Общие вопросы C/C++ 3 15.01.2010 12:06