Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

Редактирование времени в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.038 c
4-1157332644
Viacheslav
2006-09-04 05:17
2007.01.21
Диалог "Свойства".


2-1167756911
azl
2007-01-02 19:55
2007.01.21
Изменение цвета от #000000 до #FFFFFF с заданным шагом


2-1166304928
coxxx
2006-12-17 00:35
2007.01.21
Как программно создать подключению к инету


2-1167299358
SarDoX
2006-12-28 12:49
2007.01.21
Чужой TListView.


3-1162387159
Layner
2006-11-01 16:19
2007.01.21
cannot sort a row of size 8086..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский