Форум: "Начинающим";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
ВнизВыбор значения поля в DBGrid из списка и сопоставление Найти похожие ветки
← →
Delphi basic © (2006-07-24 14:15) [0]Есть таблица БД, в которой месяц хранится как число (1..12).
Можно ли в DBGrid выбирать значение поля из списка ("январь".."декабрь") и сопоставлять его с месяцем?
← →
Delphi basic © (2006-07-24 14:16) [1]Проблема тут в том, что эл-ты списка-строковые значения, а в БД хранится число
← →
Сергей М. © (2006-07-24 14:18) [2]Ну так и пиши в БД не сам элемент списка, а его индекс в списке ! В чем проблема-то ?
← →
Delphi basic © (2006-07-24 14:21) [3]Данные редактируются прямо гриде, и он ругается на попытку присвоения числовому полю строкового значения.
← →
Сергей М. © (2006-07-24 14:23) [4]Грид не может ругаться на это.
Ругается DataSet.
У DataSet есть событие OnBeforePost, в его обработчике ты вправе преобразовать "январь" в единицу.
← →
Desdechado © (2006-07-24 14:31) [5]можно использовать lookup-поля
← →
Германн © (2006-07-24 14:36) [6]OnGetText, OnSetText тоже могут помочь ОРД.
← →
Сергей М. © (2006-07-24 14:39) [7]
> Германн © (24.07.06 14:36) [6]
Не помогут они ОРД.
Текстовое значение ячейки DBGrid"а и значение соответствующего поля соответствующей редактируемой записи НД - не одно и то же.
← →
Delphi basic © (2006-07-24 14:42) [8]
> Германн © (24.07.06 14:36) [6]
> OnGetText, OnSetText тоже могут помочь ОРД.
Спасибо, то что надо!
← →
Сергей М. © (2006-07-24 14:44) [9]
> Delphi basic © (24.07.06 14:42) [8]
Значит ты в корне неверно поставил вопрос.
← →
Delphi basic © (2006-07-24 14:55) [10]
> Сергей М. © (24.07.06 14:44) [9]
>
> > Delphi basic © (24.07.06 14:42) [8]
>
>
> Значит ты в корне неверно поставил вопрос.
Ну хорошо, вот более подробная постановка:
Есть таблица, в которой хранятся некие значения по периодам. Поля таблицы:
1) УИ - уникальный ид-р
2) год - число
3) месяц - число (1..12)
4), 5) .... - значения на период 2) + 3)
Требуется организовать ввод данных в эту таблицу.
Требования к вводу данных:
- ввод непосредственно в таблице (визуальном компоненте)
- месяца должны отображаться в их строковых эквивалентах, дабы не перегружать пользователя интерпретацией цифр как месяцев.
Вроде все :)
← →
Delphi basic © (2006-07-24 14:57) [11]Но это так, лирическое отступление, проблему я уже решил с помощью совета [6]
← →
Сергей М. © (2006-07-24 15:03) [12]
> Требуется организовать ввод данных в эту таблицу
Ввод вводу рознь.
> проблему я уже решил с помощью совета
А каково юзеру после этого ?
← →
Delphi basic © (2006-07-24 15:09) [13]
> А каково юзеру после этого ?
А что с юзером?
Это как раз то, что ему нужно: вместо вспоминания номера месяца и ввода числа он просто выбирает месяц из списка.
← →
Германн © (2006-07-24 15:12) [14]2 Сергей М. ©
А чем OnGetText, OnSetText испортят жизнь юзеру?
← →
Сергей М. © (2006-07-24 15:13) [15]
> А что с юзером?
> Это как раз то, что ему нужно
Это тебе сам обрадованный юзер сказал, который открыл НД и увидел (еще ДО того как ему потребовалось редактирование этого НД) в гриде в соотв.колонке вместо привычных "январь..декабрь" цифирь от 1 до 12 ?
← →
Германн © (2006-07-24 15:17) [16]
> Это тебе сам обрадованный юзер сказал, который открыл НД
> и увидел (еще ДО того как ему потребовалось редактирование
> этого НД) в гриде в соотв.колонке вместо привычных "январь.
> .декабрь" цифирь от 1 до 12 ?
>
А тебе кто это сказал? Юзер увидит как раз "привычные январь и т.п."
← →
Delphi basic © (2006-07-24 15:22) [17]
> Сергей М. © (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:26) [18]Может и увидит. Согласен. Смотря в какой момент времени будет активирован этот обработчик. Но, согласись, глупо и неразумно позволять юзеру совершать ошибки ввода, чтобы потом их героически программно преодолевать. На то есть выбор из списка, привязанного именно к полю НД (см. [5])
← →
Германн © (2006-07-24 15:36) [19]
> Смотря в какой момент времени будет активирован этот обработчик.
Не сомневайся. Он вызовется именно тогда, когда нужно.
> Но, согласись, глупо и неразумно позволять юзеру совершать
> ошибки ввода, чтобы потом их героически программно преодолевать.
> На то есть выбор из списка, привязанного именно к полю
> НД (см. [5])
Согласен, но тогда уж скорей надо было упоминать не Lookup-поля, а PickList колонки. Имхо
← →
Delphi basic © (2006-07-24 15:45) [20]
> Сергей М. © (24.07.06 15:26) [18]
Так я в гриде ограничил список PickList"ом, так что если юзер выберет (введет вручную) что-то не оттуда, то полю ничего и не присвоится.
"Эта принцесса не стоит ломки копий, Алонсо. Пойдем-ка лучше покормим лошадей".
Произведение малоизвестного автора.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.038 c