Текущий архив: 2006.07.23;
Скачать: CL | DM;
Вниз
работа с DBGrid ом Найти похожие ветки
← →
Kinda © (2006-07-04 09:31) [0]Необходимо в реал-тайме задать формат полей
в отображаемых в DBGride.
Например для даты установить формат dd/mm/yyyy hh:mm,
а для чисел 0,00.
Проблема заключается в том, что свойство DisplayFormat есть не у каждого типа поля, например у string его нету, с связи с этим задать формат поля таким образом не удается:
Datam.IbQ1.FieldByName["DATE"].DisplayFormat:="dd/mm/yyyy hh:mm".
Буду благодарен за помощь.
← →
Ega23 © (2006-07-04 09:36) [1]На уровне запроса?
← →
ЮЮ © (2006-07-04 09:39) [2]например у string его нету, с связи с этим задать формат поля таким образом не удается:
А что FieldByName["DATE"] строкового типа?
← →
Kinda © (2006-07-04 09:42) [3]>> Ega23 © (04.07.06 09:36) [1]
>> На уровне запроса?
Короче говоря в гриде отображено то что
выбрано из базы обычным select * from table where ....
Так вот среди выбранных полей есть даты, числа и т.д.
Необходимо чтобы даты отображались так, как захочет юзерь,
например dd/mm/yyyy hh:ss вместо стандартного dd/mm/yyyy hh:mm:ss
для типа поля TimeStamp.
Тоже касается и полей типа DoublePrecision.
← →
Ega23 © (2006-07-04 09:43) [4]
> Короче говоря в гриде отображено то что
> выбрано из базы обычным select * from table where ....
Я обычно не "обычный Select * " делаю. Рекомендую подумать в этом направлении.
← →
Kinda © (2006-07-04 09:48) [5]>> Я обычно не "обычный Select * " делаю. Рекомендую подумать в этом
>> направлении.
Например? Просто у меня SQL для запроса пишется руками
в реал-тайме, и какой он будет заранее не известно.
← →
Vlad © (2006-07-04 09:56) [6]
> Kinda © (04.07.06 09:31)
> свойство DisplayFormat есть не у каждого типа поля
зато у всех полей есть событие OnGetText, а также существуют функции FormatFloat, FormatDateTime и т.п.
← →
Kinda © (2006-07-04 10:01) [7]>> Vlad © (04.07.06 09:56) [6]
Спасибо, щас попробую так.
← →
ЮЮ © (2006-07-04 10:27) [8]Даты, по-моему выводятся использую ShortDateFormat. Попробуй измени её в приложении
← →
Kinda © (2006-07-04 10:38) [9]>> Vlad © (04.07.06 09:56) [6]
Запутался чуток, если не трудно
кусок кода напиши.
← →
Desdechado © (2006-07-04 10:49) [10]> свойство DisplayFormat есть не у каждого типа поля, например у string его нету
> для типа поля TimeStamp
> Тоже касается и полей типа DoublePrecision.
И где тебе для стринга понадобилось форматирование, если у тебя даты и числа?
И ЮЮ © (04.07.06 09:39) [2] осталось безответным.
← →
Ega23 © (2006-07-04 10:55) [11]Ещё раз рекомендую взглянуть в сторону SQL:
Select Now=Convert(varchar(10),getdate(), 104)
← →
Kinda © (2006-07-04 10:55) [12]>> Desdechado © (04.07.06 10:49) [10]
мне для стринга ненужно форматирование,
нужно для дат и чисел.
Так сделать не выходит:
Datam.IbQ1.FieldByName["DATE"].DisplayFormat:="dd/mm/yyyy hh:mm".
Ошибка, я так понимаю, возникает из-за того, что заранее компилятору неизвестно является ли DATE датой, а это свойство есть только у дат и чисел.
← →
Desdechado © (2006-07-04 11:06) [13]> заранее компилятору неизвестно является ли DATE датой
Компилятор тут ни при чем. У поля есть свойство DataType, в котором всегда можно определить, какой тип данных. И в зависимости от этого присваивать или нет строку формата.
← →
Vlad © (2006-07-04 11:09) [14]
> Kinda © (04.07.06 10:38) [9]
> >> Vlad © (04.07.06 09:56) [6]
> Запутался чуток, если не трудно
> кусок кода напиши.
на OnGetText пишешь что-то вроде этого:case Sender.DataType of
ftDateTime: Text := FormatDateTime("dd-mm-yy hh:mm:ss", Sender.AsDateTime);
ftCurrency: Text := FormatFloat("###,##0.00 ðóá", Sender.AsFloat);
ftFloat: Text := FormatFloat("###,##0.00", Sender.AsFloat);
else Text := Sender.AsString;
end;
и цепляешь эту процедуру ко всем полям
← →
Kinda © (2006-07-04 11:47) [15]>>Desdechado ©
>> Компилятор тут ни при чем.
Ошибка возникает во время компиляции...
Но идея понятна попробую как ты сказал.
>>Vlad © (04.07.06 11:09) [14]
Спасибо, практически тоже что и
>>Desdechado © (04.07.06 11:06) [13] предложил, только вид сбоку.
Сейчас поэкспериментирую, думаю что вопрос решен будет.
← →
sniknik © (2006-07-04 12:34) [16]> Так сделать не выходит:
> Datam.IbQ1.FieldByName["DATE"].DisplayFormat:="dd/mm/yyyy hh:mm".
> Ошибка, я так понимаю, возникает из-за того, что заранее компилятору неизвестно является ли DATE датой, а это
> свойство есть только у дат и чисел.
а тебе это известно? наверняка? ну так поясни это компилятору...
(Datam.IbQ1.FieldByName["DATE"] as TDateTimeField):="dd/mm/yyyy hh:mm";
← →
sniknik © (2006-07-04 12:40) [17];) самле главное (DisplayFormat) то и пропустил... ну неважно, понятно в общем.
← →
Kinda © (2006-07-04 13:00) [18]
> а тебе это известно? наверняка? ну так поясни это компилятору.
> ..
> (Datam.IbQ1.FieldByName["DATE"] as TDateTimeField):="dd/mm/yyyy
> hh:mm";
хитро :))
← →
Kinda © (2006-07-04 13:04) [19]
> sniknik © (04.07.06 12:34) [16]
Короче понятно что нужно устраивать проверки типа поля,
и последующий DisplayFormat
в противном случае теряется смысл делать
поля динамическими, можно с таким успехом все в design-time установить
← →
Vlad © (2006-07-04 13:16) [20]
> Короче понятно что нужно устраивать проверки типа поля,
> и последующий DisplayFormat
ты ж вроде говорил что тебя string поле интересует?
> свойство DisplayFormat есть не у каждого типа поля, например
> у string его нету
Там действительного такого свойства нету, как ни крути. Поэтому я и сказал про OnGetText, в нем преобразовывай как угодно.
← →
Kinda © (2006-07-04 13:39) [21]
> Vlad © (04.07.06 13:16) [20]
> ты ж вроде говорил что тебя string поле интересует?
Нет у меня задача такова:
Есть Грид, отображающий данные произвольного SQL запроса,
есть окно настроек, в котором можно указать как будут отображаться
ЛЮБЫЕ поля содержащие даты, числа и т.д.
После выполнение запроса нужно ВСЕ настройки применить к полям
отображаемым в гриде.
В этом случае твое предложение мне кажется наиболее универсальным,
только неясно как полям OnGetText динамически назначать.
← →
Vlad © (2006-07-04 14:04) [22]
> Kinda © (04.07.06 13:39) [21]
> только неясно как полям OnGetText динамически назначать.
Все просто.
TForm1 = class(TForm)
....
private
....
procedure DisplayMyText(Sender: TField; var Text: String; DisplayText: Boolean);
....
public
{ Public declarations }
end;
........
{пишем процедуру, которая будет являться обработчиком OnGetText всех полей}
procedure TForm1.DisplayMyText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
case Sender.DataType of
ftDateTime: Text := FormatDateTime(...);
ftCurrency: Text := FormatFloat(...);
ftFloat: Text := FormatFloat(...);
ftString: Text := ....;
else
Text := Sender.AsString;
end;
end;
{на событие AfterOpen твоего Query вешаем такой обработчик}
procedure TForm1.Query1AfterOpen(DataSet: TDataSet);
var
i: integer;
begin
for i := 0 to Query1.FieldCount - 1 do
begin
Query1.Fields[i].OnGetText := DisplayMyText;
end;
end;
← →
Kinda © (2006-07-04 14:12) [23]
> Vlad © (04.07.06 14:04) [22]
Огромнейшее спасибо, дай Бог тебе здоровья. :)
Страницы: 1 вся ветка
Текущий архив: 2006.07.23;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.029 c