Форум: "Базы";
Текущий архив: 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