Re: Прокрутка DataGridViewCell
От: pumpurumer  
Дата: 06.09.10 21:38
Оценка:
Здравствуйте, Thrillobite, Вы писали:

T>Всем привет!


T>Помогите, пожалуйста, решить одну проблему... Есть ячейки в DataGridView, в которых много текста, и есть ограничение по высоте строки. Чтобы можно было прокрутить содержимое всей ячейки, я в обработчике события EditingControlShowing у DataGridView делаю следующее:


T>
T>(e.Control as TextBox).ScrollBars = ScrollBars.Vertical;
T>


T>У моей ячейки появляется скорллбар и все как будто бы замечательно. Но если я — даже в режиме редактирования ячейки — кручу колесо мыши, то прокручивается вовсе не скроллбар ячейки, а скролл всей гридвью (а мне-то надо прокручивать как раз ячейку). Кроме того, если я "иду" по строкам внутри ячейки стрелками, то, дойдя до верхней строки, я автоматически перехожу на ячейку в предыдущей строке, а мне надо, чтобы курсор "упирался" в верх ячейки и никуда больше не переходил (тоже самое, конечно, и для стрелки вниз). К слову сказать в гриде DevExpress именно такое поведение, как мне надо: при редактировании ячейки весь приоритет отдается это ячейке — и скроллбар работает только для нее, и стрелки для навигации. Но к сожалению девэкспрессовый грид платный ...


T>Единственное решение, которое я пока придумал — это выключать у гридвью скроллбары в начале редактирования ячейки и включать в конце. Но мне это решение очень не нравится, т.к. это весьма пугающе для пользователей: вдруг пропадает скроллбар и потом непонятно как его вернуть назад (выход из режима редактирования ячейки — вещь весьма неочевидная для непрограммистов ).


T>Так что вот такая у меня проблема. Может быть у кого-нибудь есть рецепты для обхода? Или, может быть, вы посоветуете какой-то другой компонент "таблица WinForms", не такой страшный , как DataGridView, но в то же время бесплатный? Если непонятно изложил — извините, попробую переформулировать.


T>Заранее спасибо!



суть вашей проблемы: у ячейки datagridview два режима: отображение содержимого и редактирование.
Режим просмотра — отображается "картинка с содержимым", код контрола внутри ячейки не выполняется, события ему не передаются.
Режим редактирования — активируется "рабочий режим" у контрола внутри ячейки, события от пользователя передаются к контролу, фокус находится в контроле, гриду не передаются события.
Переход в режим редактирования задается в настройках грида (не помню каким свойством)
Я в свое время пытался решить подобную проблему, но пришол к выводу что оно того не стоит.
Выход: использовать другой грид, или использовать wpf.
Для winforms видел не так давно на codeproject.com свободный грид, который работает "как вам надо". называется помоему SourceGrid(могу ошибатся, но он там где-то есть)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.