![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выбор значения поля в DBGrid из списка и сопоставление
Delphi basic © (2006-07-24 14:15:00)Есть таблица БД, в которой месяц хранится как число (1..12).
Можно ли в DBGrid выбирать значение поля из списка ('январь'..'декабрь') и сопоставлять его с месяцем?
Delphi basic (2006-07-24 15:45:00) [1]
> Сергей М. © (24.07.06 15:26) [18]
Так я в гриде ограничил список PickList'ом, так что если юзер выберет (введет вручную) что-то не оттуда, то полю ничего и не присвоится.
"Эта принцесса не стоит ломки копий, Алонсо. Пойдем-ка лучше покормим лошадей".
Произведение малоизвестного автора.
Германн (2006-07-24 15:36:00) [2]
> Смотря в какой момент времени будет активирован этот обработчик.
Не сомневайся. Он вызовется именно тогда, когда нужно.
> Но, согласись, глупо и неразумно позволять юзеру совершать
> ошибки ввода, чтобы потом их героически программно преодолевать.
> На то есть выбор из списка, привязанного именно к полю
> НД (см. [5])
Согласен, но тогда уж скорей надо было упоминать не Lookup-поля, а PickList колонки. Имхо
Сергей М. (2006-07-24 15:26:00) [3]Может и увидит. Согласен. Смотря в какой момент времени будет активирован этот обработчик. Но, согласись, глупо и неразумно позволять юзеру совершать ошибки ввода, чтобы потом их героически программно преодолевать. На то есть выбор из списка, привязанного именно к полю НД (см. [5])
Delphi basic (2006-07-24 15:22:00) [4]
> Сергей М. © (24.07.06 15:13) [15]
В OnGetText датасета выполняется преобразование в удобочитаемый вид:
procedure TDataModuleMain.pFIBDataSetCardQuotaPERIOD_MONTHGetText(
Sender: TField; var Text: String; DisplayText: Boolean);
begin
Text := DecodeMonth(pFIBDataSetCardQuota.FieldByName('period_month').AsInteger)
end;
Германн (2006-07-24 15:17:00) [5]
> Это тебе сам обрадованный юзер сказал, который открыл НД
> и увидел (еще ДО того как ему потребовалось редактирование
> этого НД) в гриде в соотв.колонке вместо привычных "январь.
> .декабрь" цифирь от 1 до 12 ?
>
А тебе кто это сказал? Юзер увидит как раз "привычные январь и т.п."
Сергей М. (2006-07-24 15:13:00) [6]
> А что с юзером?
> Это как раз то, что ему нужно
Это тебе сам обрадованный юзер сказал, который открыл НД и увидел (еще ДО того как ему потребовалось редактирование этого НД) в гриде в соотв.колонке вместо привычных "январь..декабрь" цифирь от 1 до 12 ?
Германн (2006-07-24 15:12:00) [7]2 Сергей М. ©
А чем OnGetText, OnSetText испортят жизнь юзеру?
Delphi basic (2006-07-24 15:09:00) [8]
> А каково юзеру после этого ?
А что с юзером?
Это как раз то, что ему нужно: вместо вспоминания номера месяца и ввода числа он просто выбирает месяц из списка.
Сергей М. (2006-07-24 15:03:00) [9]
> Требуется организовать ввод данных в эту таблицу
Ввод вводу рознь.
> проблему я уже решил с помощью совета
А каково юзеру после этого ?
Delphi basic (2006-07-24 14:57:00) [10]Но это так, лирическое отступление, проблему я уже решил с помощью совета [6]
Delphi basic (2006-07-24 14:55:00) [11]
> Сергей М. © (24.07.06 14:44) [9]
>
> > Delphi basic © (24.07.06 14:42) [8]
>
>
> Значит ты в корне неверно поставил вопрос.
Ну хорошо, вот более подробная постановка:
Есть таблица, в которой хранятся некие значения по периодам. Поля таблицы:
1) УИ - уникальный ид-р
2) год - число
3) месяц - число (1..12)
4), 5) .... - значения на период 2) + 3)
Требуется организовать ввод данных в эту таблицу.
Требования к вводу данных:
- ввод непосредственно в таблице (визуальном компоненте)
- месяца должны отображаться в их строковых эквивалентах, дабы не перегружать пользователя интерпретацией цифр как месяцев.
Вроде все :)
Сергей М. (2006-07-24 14:44:00) [12]
> Delphi basic © (24.07.06 14:42) [8]
Значит ты в корне неверно поставил вопрос.
Delphi basic (2006-07-24 14:42:00) [13]
> Германн © (24.07.06 14:36) [6]
> OnGetText, OnSetText тоже могут помочь ОРД.
Спасибо, то что надо!
Сергей М. (2006-07-24 14:39:00) [14]
> Германн © (24.07.06 14:36) [6]
Не помогут они ОРД.
Текстовое значение ячейки DBGrid'а и значение соответствующего поля соответствующей редактируемой записи НД - не одно и то же.
Германн (2006-07-24 14:36:00) [15]OnGetText, OnSetText тоже могут помочь ОРД.
Desdechado (2006-07-24 14:31:00) [16]можно использовать lookup-поля
Сергей М. (2006-07-24 14:23:00) [17]Грид не может ругаться на это.
Ругается DataSet.
У DataSet есть событие OnBeforePost, в его обработчике ты вправе преобразовать "январь" в единицу.
Delphi basic (2006-07-24 14:21:00) [18]Данные редактируются прямо гриде, и он ругается на попытку присвоения числовому полю строкового значения.
Сергей М. (2006-07-24 14:18:00) [19]Ну так и пиши в БД не сам элемент списка, а его индексв списке ! В чем проблема-то ?
Delphi basic (2006-07-24 14:16:00) [20]Проблема тут в том, что эл-ты списка-строковые значения, а в БД хранится число