|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
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 |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
Обрабатывать надо в соурсе. Откуда данные в DataGridView?
|
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 |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
Что значит попадают, вы их как в грид выводите?
|
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. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |