Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Редактирование времени в DBGrid   Найти похожие ветки 

 
Katya   (2006-10-26 22:02) [0]

Здравствуйте! Подскажите, как решить следующую проблему: в DBGrid имеется поле для ввода времени в формате 00:00. При этом для соответствующего поля в DataSet-е задана маска ввода. Пытаюсь изменить значение в ячейке, она переходит в состояние редактирования, но при этом обнуляет минуты, а часы остаются без изменений, т.е. если было значение "08:30", то при редактировании отобразится "08:00". Самое печальное: для исходного значения "00:00" отображается "99:__". Может это как-то связано с маской ввода? Кто-нибудь знает, как это исправить? Заранее огромное спасибо.


 
Shirson ©   (2006-10-27 08:46) [1]

Из собственного опыта - никаких редактирований в гриде или прочих компонентах с "прямым" доступом в базу.
Только через обычные компоненты и "фиксировать" средствами update. Писать придётся больше, но работает не в пример надёжнее и меньше изматывает пользователя.


 
Sergey13 ©   (2006-10-27 09:13) [2]

> [0] Katya   (26.10.06 22:02)

Какого типа поле, какая маска?

> [1] Shirson ©   (27.10.06 08:46)
> Писать придётся больше, но работает не в пример надёжнее и меньше изматывает пользователя.
И пользователя изматывает (тут конечно много нюансов, но по моему опыту изматывает) и сервер.


 
Katya   (2006-10-28 21:56) [3]

Поле DateTime, маска "!90:00;1;_" (стандартная маска ShortTime).
Может это и выход - использовать обычные компоненты, но требование пользователя: отсутствие кнопок типа "Записать", "Обновить" и т.п.; к тому же требуется отображение большого кол-ва данных, т.е. без грида не обойтись.


 
MsGuns ©   (2006-10-28 22:50) [4]

Катюша, Вы избрали далеко не самый лучший способ ввода даты, давая править непосредственно в гриде, да еще и с помощью маски - такой интерфейс просто крайне неудобен для пользователя.
Воспользуйтесь имеющимися компонентами или нарисуйте свою панельку с двумя или тремя эдитами (час, мин, сек), которую при попадании фокуса в нужную колонку грида рисуйте прямо поверх ячейки, подгоняя геометрию.
Правильно введенное время просто программно присваивайте полю записи.


 
Johnmen ©   (2006-10-29 00:17) [5]


> MsGuns ©   (28.10.06 22:50) [4]
> ....такой интерфейс просто крайне неудобен для пользователя.


Опять за старое. Хоть бы ИМХО добавил........


 
MsGuns ©   (2006-10-29 01:37) [6]

>Johnmen ©   (29.10.06 00:17) [5]
>Опять за старое. Хоть бы ИМХО добавил........

Жэка, иди ты..
;))


 
Johnmen ©   (2006-10-29 02:02) [7]


> MsGuns ©   (29.10.06 01:37) [6]
> Жэка, иди ты..
> ;))


Не уйду! Не позволю развращать новичков! :)))


 
Германн ©   (2006-10-29 02:15) [8]


> нарисуйте свою панельку с двумя или тремя эдитами (час,
> мин, сек), которую при попадании фокуса в нужную колонку
> грида рисуйте прямо поверх ячейки, подгоняя геометрию.

И это совет для "новичков"?


 
Ketmar ©   (2006-10-29 02:17) [9]

>[8] Германн(c) 29-Oct-2006, 02:15
>И это совет для "новичков"?
а мы, между прочим, в "базах". %-)


 
Германн ©   (2006-10-29 02:49) [10]


> Ketmar ©   (29.10.06 02:17) [9]
>
> >[8] Германн(c) 29-Oct-2006, 02:15
> >И это совет для "новичков"?
> а мы, между прочим, в "базах". %-)
>

Виноват. Увы :-(

Смутил Johnmen ©   (29.10.06 02:02) [7]
> MsGuns ©   (29.10.06 01:37) [6]
> Жэка, иди ты..
> ;))
Не уйду! Не позволю развращать новичков! :)))

Наверно, я зря сюда влез, поскольку очень слаб в вопросах по базам данных.
Но в некоем моем случае, пользователи действительно предпочли "прямой ввоод данных"  через DBGrid.


 
Petr V.Abramov   (2006-10-29 02:54) [11]

а на какой-нить машине short(long)dateformat будет другой стоять, и гвакнется программа...
текстовое поле надо давать редактировать, а там и проблем меньше будет (надеюсь :)


 
Katya   (2006-10-30 18:02) [12]


> а на какой-нить машине short(long)dateformat будет другой
> стоять, и гвакнется программа...

Не согласна. Формат отображения в гриде никак не связан с форматом хранения в MS SQL. При "прямом" вводе запросы то нигде не прописываются и формат не задается. К тому же, MS SQL поддерживает большое кол-во форматов.


 
Katya   (2006-10-30 18:10) [13]

Да, кстати, кто-нибудь знает, как временно "отключить" грид от базы, сохранив при этом данные. Идея следующая: закачать данные, позволить их отредактировать, а затем переслать сразу все изменения.


 
Shaman_ ©   (2006-10-30 18:51) [14]

ApplyUpdates + F1


 
Petr V.Abramov   (2006-10-30 20:58) [15]

> Формат отображения в гриде никак не связан с форматом хранения в MS SQL.
 вот именно. хранится как угодно, а отображается - как в настройках винды сказано. Кстати, отсюда и глюк м.б. - StrToDateTime исходит не из того формата


 
msguns ©   (2006-10-31 14:16) [16]

>Katya   (30.10.06 18:10) [13]
>Да, кстати, кто-нибудь знает, как временно "отключить" грид от базы, сохранив при этом данные. Идея следующая: закачать данные, позволить их отредактировать, а затем переслать сразу все изменения.

TClientDataSet


 
Katya   (2006-10-31 21:36) [17]


> хранится как угодно, а отображается - как в настройках винды
> сказано. Кстати, отсюда и глюк м.б. - StrToDateTime исходит
> не из того формата

Похоже на то. Реально хранится в базе в виде "1899-12-30 00:00:00.000". При маске "!90:00;1;_" (с подавлением начальных пробелов) отображается "99:00", а если маска "90:00;1;_" (подавление конечных пробелов), то "30:00". Причем этот глюк появляется при попытке редактирования значения в ячейке грида, а изначально отображает все данные как надо.

Хотя проблему уже решила (точнее обошла) следующим образом: создаю невидимый компонент DBDateTimeEditEh, в котором отображаю значение нужного поля активной записи и отрисовываю его при получении фокуса нужной ячейкой грида.


> да еще и с помощью маски - такой интерфейс просто крайне
> неудобен для пользователя

Не могу сказать, что интерфейс стал намного удобнее, чем при использовании маски.


 
Johnmen ©   (2006-10-31 22:08) [18]


> Katya   (31.10.06 21:36) [17]


Ну уж если есть EhLib, то использовав DBGridEh, можно увидеть, что для датных полей набора данных автоматически предлагается вводить даты посредством календаря при нажатии кнопки "\/" в ячеки грида, соответствующей датному полю. При этом можно и запретить прямой ввод, и организовать проверку прямого ввода, и т.д. и т.п.


 
Petr V. Abramov ©   (2006-10-31 23:13) [19]

> Johnmen ©   (31.10.06 22:08) [18]
а если мышки нету? это не шутка, иногда люди строчат одной правой по кейпаду


 
MsGuns ©   (2006-10-31 23:46) [20]

>Petr V. Abramov ©   (31.10.06 23:13) [19]
>а если мышки нету? это не шутка, иногда люди строчат одной правой по кейпаду

Для этого существует Tab и ShortCut


 
Johnmen ©   (2006-11-01 00:17) [21]


> Petr V. Abramov ©   (31.10.06 23:13) [19]
> а если мышки нету?


Ну клава-то есть наверняка...


 
Германн ©   (2006-11-01 01:58) [22]


> MsGuns ©   (31.10.06 23:46) [20]
>
> Johnmen ©   (01.11.06 00:17) [21]
>

Эт точно. О сколько мне открылось, когда я впервые узнал об Alt+ArrowDown :-)


 
Johnmen ©   (2006-11-01 09:07) [23]


> Германн ©   (01.11.06 01:58) [22]


Не только даун, но и ап....:)


 
Anatoly Podgoretsky ©   (2006-11-01 10:24) [24]

> Johnmen  (01.11.2006 09:07:23)  [23]

Попрошу не переходить на персоналии, я к нему отношения не имею.


 
Katya   (2006-11-01 19:41) [25]


> Ну уж если есть EhLib, то использовав DBGridEh, можно увидеть,
>  что для датных полей набора данных автоматически предлагается
> вводить даты посредством календаря при нажатии кнопки "\/"
> в ячеки грида, соответствующей датному полю. При этом можно
> и запретить прямой ввод, и организовать проверку прямого
> ввода, и т.д. и т.п.

Посредством календаря можно вводить дату, а я ввожу время! В том то и дело, что дата мне не нужна!


 
Sam Stone ©   (2006-11-01 19:50) [26]

Меня всегда интересовало, кто же такой мудрый учит вводить дату/время через эдит/максэдит... проще всего, на мой взгляд, взять DevExpress компоненты, TdxDBGrid. У него есть столбец TdxDBGridTimeColumn. Поскольку TdxDBGridDateColumn работает замечательно, то и столбец для времени глючить не должен (не работал с ним).


 
MsGuns ©   (2006-11-01 23:46) [27]

За почти неделю, что прошла с момента задание вопроса, можно было решить эту "мудреную" задачку сомями споробами, вплоть до написания собственной "гридной" компоненты.
Катя, пофлудить решили ?


 
Petr V. Abramov ©   (2006-11-02 00:53) [28]

> MsGuns ©   (01.11.06 23:46) [27]
 все нормально, мотает на ус. авось, вспомнит, что тут трепалогили
> Katya   (01.11.06 19:41) [25]
 пардон, что в общественном месте о ВАс в третьем  лице


 
evvcom ©   (2006-11-03 10:05) [29]

> [17] Katya   (31.10.06 21:36)
> Реально хранится в базе в виде "1899-12-30 00:00:00.000".

Нет! В базе хранится во внутреннем формате, подозреваю, что это число в формате с плавающей запятой. Но никак не char(23). То что ты видишь в чаре, это формат представления, и он может быть изменен, а внутреннее представление даты постоянно.

> [19] Petr V. Abramov ©   (31.10.06 23:13)
> а если мышки нету

А Alt+Down на что?

> [26] Sam Stone ©   (01.11.06 19:50)

Глючить они не глючат в паре. У TdxDBGridDateColumn есть свойство SaveTime, но подозреваю, что эти Column-ы ведут себя аналогично парам TdxDBDateEdit/TdxDBTimeEdit и TdxInspectorDBDateRow/TdxInspectorDBTimeRow, т.е. отображают и дату и время, а редактируют только свою часть. Мне пришлось писать наследников от указанных компонент, чтобы отображалась тоже только своя часть, а то как-то некузяво было видеть 2 поля с одинаковой инфой ради того, чтобы можно было редактировать дату и время отдельно.



Страницы: 1 вся ветка

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.051 c
2-1167718710
kernel
2007-01-02 09:18
2007.01.21
Реакция на изменение раскладки клавиатуры


6-1156410746
digger
2006-08-24 13:12
2007.01.21
IdHTTP vs ISA Server 2004


15-1167137146
Petr V. Abramov
2006-12-26 15:45
2007.01.21
А не устроить ли предновогоднее ММР


15-1167083250
Footballer
2006-12-26 00:47
2007.01.21
Прикол от Bornald


15-1167521225
Petr V. Abramov
2006-12-31 02:27
2007.01.21
А вот Дельфи живет после смерти