Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизTDBGrid Найти похожие ветки
← →
Vitalik (2004-04-30 12:39) [0]Привет!
Вопрос больше не из сферы работы с БД, а из сферы использования компонентов.
У меня есть табличка (TDBGrid) в которое в некоторых колонках отображаются данные типа DateTime. Эти данные можно редактировать (т.е. не ReadOnly). Мне не нравится то каким образом компонент TDBGrid позволяет изменять дату. Я хочу для этих целей использовать TDateTimePicker. То есть чтобы TDTP полностью закрывал собой ячейку при её выделении, а когда пользователь выбирает в нём дату, содержимое данной записи должно обновляться.
Понятно, что мне нужно отображать этот ДТП при выделении ячейки из колонки, содержащей данные типа DateTime в соответствующем месте и с соответствующими размерами.
Так вот я бы хотел узнать, существует ли событие у TDBGrid, возникающее, когда в нём меняется выделение ячеек?
Т.е. в которое можно было бы вставить, например, такую конструкцию:
if (DBGrid1.SelectedField.DataType = ftDateTime) and
(not DBGrid1.SelectedField.ReadOnly) then
begin
{тут каким-либо образом нужно узнать расположение и размеры выделенной ячейки и установить соответствующие параметны в TDateTimePicker}
dtpSetDate.show; {отображаем TDateTimePicker}
end;
Вот примерно такую вещь мне нужно сделать.
У меня,честно говоря, пока что всё упёрлось в том, что я не знаю какое событие нужно отлавливать. Может быть это событие и не у TDBGrid, а у TADODataSet?
В общем кто чем поможет - большое спасибо!
Если что-то непонятно написал - спрашивайте, я уточню :)
← →
Vlad © (2004-04-30 12:52) [1]Ну так, навскидку варианты такие:
1) Использовать TDBGrid.Columns.ButtonStyle = cbsEllipsis
а так же событие грида OnEditButtonClick
2) Написать собственный InplaceEditor как наследника TDateTimePicker
3) Использовать "продвинутые" гриды сторонних разработчиков
← →
Vitalik (2004-04-30 14:05) [2]Хм... Да, вариант №1 может подойти... При нажатии на кнопку отображать окошко с TMonthCalendar. Хорошо!
А ещё меня заинтересовал вариант №2. Что за наследник? Вроде TDateTimePicker сам по себе и так устраивает. Дело-то не в нём, дело в TDBGrid.
Разверните пожалуйста ответ по этому пункту, вдруг за этой неоднозначной фразой скрывается что-то действительно интересное! :)
← →
Vlad © (2004-04-30 14:23) [3]
> Vitalik (30.04.04 14:05) [2]
> за этой неоднозначной фразой скрывается что-то действительно
> интересное! :)
За этой фразой скрывается вполне грамотное решение Вашей задачи.
Для этого нужно понять что такое InplaceEditor. Грубо говоря - это тот объект, куда вы вводите текст, кода ячейка грида имеет фокус ввода. Этот объект представляет собой обычный TMaskEdit.
Когда грид находится в обычном состоянии - он представляет собой простую "сетку". Но как только вы переводите любую ячейку в режим редактирования, то на ее месте создается этот самый TMaskEdit (он же InplaceEditor), и вы в него вводите текст. Затем, когда ячейка теряет фокус ввода, объект InplaceEditor уничтожается, и грид опять становится обычной "сеткой".
Для Вашего случая было бы удобно создать собственный InplaceEditor, но не типа TMaskEdit, а типа TDateTimePicker.
Тогда, если фокус ввода получает ячейка с датой, то будет активизироваться Ваш собственный InplaceEditor.
Вобщем объяснил как смог :-)
Доп. информацию можете почитать в справке (TInplaceEdit + F1)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c