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

Вниз

Динамическая таблица   Найти похожие ветки 

 
elf_123   (2003-04-04 11:30) [0]

Зрдавствуйте все!

Вопрос: как сделать такую TDBGrid, чтобы размеры колонок соответсвовали длине наибольшей записи. И чтобы после
Query1.Close();
Query1.Open();

всё это не слетало к чертям


 
Dred2k   (2003-04-04 12:14) [1]

1. Создать колонки, назначить поля (после этого "слетать" не будут).
2. Определить максимальную длину каждого поля (по кол-ву символов). Только для строк, остальное - прогнозируемо по длине.
3. Дальше просчитать "ширины" ;) колонок. При этом учесть, что ширина букв, символов, заглавных и т.п. одинакова только при использовании моноширинных шрифтов (MS Sans Serif, к примеру, этим не отличается...). При подсчете "ширин" придется оттолкнуться от канваса (устройства? - могу ошибиться, но точно помню, что видел в WinAPI функцию, возвращающую экранные метрические параметры текстового блока).

А вообще - задача твоя спорна по полезности, на мой взгляд.
Процесс установления этих самых "ширин" при определенных условиях займет не мало времени....
Лучше юзеру дай возможность менять ширину столбцов и сохраняй ее при помощи того же TFormStorage из RX.


 
elf_123   (2003-04-04 12:45) [2]


> Лучше юзеру дай возможность менять ширину столбцов и сохраняй
> ее при помощи того же TFormStorage из RX.


????


> 1. Создать колонки, назначить поля (после этого "слетать"
> не будут).


У меня две таблицы и поля неодинаковы... :-(


 
MsGuns   (2003-04-04 12:58) [3]

Я делал просто: После открытия датасета, но перед привязкой его к гриду делал
1. гриду - RebuildColumns (очищает массив колонок грида)
2. привязка грида к датасету.
3. перебор колонок грида с анализом типов полей, отображаемых в колонках. В цикле делается:
- центровка титула клонки
- запрет отображения автоинкрементных полей
- определение ширины (у меня было 48-для чисел и дат и для символьных - по их длине, но не менее 24 и не более 200 (при разрешалке 800x600)
- для полей нецелочисленных выставление в НД отображаемого формата (0.00)
- ширина грида вычисляется как сумма длин колонок плюс 24 на "ползунок". Если полученное значение не влазит в форму, то гриду Align := alTop/Bottom, если меньше, то заменяю им Width грида.

В результате грид более-менее сносно отображал любые запросы, таблицы и т.д.


 
Dred2k   (2003-04-04 13:34) [4]


> elf_123 © (04.04.03 12:45)

RXLib - либа из разряда "должна быть", на мой взгляд. Прости - урлов не дам, но здесь найдешь, я думаю...
TFormStorage - компонент, позволяющих автоматизировать сохранение и восттановление многих параметров форм, используя реестр или инишку (положение, размер, состояние, свойства компонент на форме и т.д......).
Кроме того, в RX есть очень неплохой TRxDBGrid, уже умеющий работать в связке с TFormStorage (этому гриду даешь сторедж и при сохранении/восстановлении сторедж его колончки и обработает).
А решение MsGuns © вполне универсально. Так что забей на точные максимальные "ширины" - юзер сам разберется, если нужно...
Успехов.


 
MsGuns   (2003-04-04 13:59) [5]

>Dred2k © (04.04.03 13:34)

RxLib очень "тяжелит" экзешник и, что особенно огорчает, неимоверно запутывет процесс пошаговой траасировки при отладке.
Поэтому и кинул его ;(((


 
Dred2k   (2003-04-04 14:26) [6]


> MsGuns © (04.04.03 13:59)


Думаю, что фактор величины экзешника в современных условиях не особо критичен (блин, чейчас нарвусь на многих! ;) ). Я помню времена, когда это было важно. Теперь уже нет, на мой взгляд, хотя и лишнее пихать не следует.
Трассировка... Убери сырцы и вопрос решится, нет? Тем более, что без бряк-поинтов все равно неудобно это.

RX я не брошу, я его уважаю "самое по себе". ;) Красиво (особенно внутри) и полезно. Широко применяю TRxMemoryData (научил его в потоках быть и dbclient не понадобился...), TRxDBGrid, стореджы, т.п. + многое в юнитах есть из вызовов.

Получилось небольшое лирическое отклонение.
;)


 
elf_123   (2003-04-04 15:50) [7]

Вы не совсем поняли...
Во время перезагрузки Query слетают размеры колонок...
При чем здесь
> RxLib очень "тяжелит" экзешник и, что особенно огорчает,
> неимоверно запутывет процесс пошаговой траасировки при отладке.

И можно мне, ламеру в БД, показать как делать

> . перебор колонок грида с анализом типов полей, отображаемых
> в колонках. В цикле делается:
> - центровка титула клонки
> - запрет отображения автоинкрементных полей
> - определение ширины (у меня было 48-для чисел и дат и
> для символьных - по их длине, но не менее 24 и не более
> 200 (при разрешалке 800x600)
> - для полей нецелочисленных выставление в НД отображаемого
> формата (0.00)
>



 
Grey_Angel   (2003-04-05 17:23) [8]

>Вопрос: как сделать такую TDBGrid, чтобы размеры колонок
>соответсвовали длине наибольшей записи. И чтобы после...

Извиняюсь, что влажу... когда-то я тоже мучался над этой проблемой... правда решил её несколько "по-ламерски" :о)

Procedure TableOpen;
var
i : integer;
ss : string;
maxwith : integer;
begin
for i:=0 to DBGrid1.Columns.Count-1 do
begin
DBGrid1.Columns.Items[i].Color:=clWhite;
maxwith:=length(DBGrid1.Columns.Items[i].FieldName);
DBGrid1.DataSource.DataSet.First;
while not DBGrid1.DataSource.DataSet.EoF do
begin
ss:=DBGrid1.DataSource.DataSet.Fields.Fields[i].AsString;
if length(ss)>maxwith then maxwith:=length(ss);
DBGrid1.DataSource.DataSet.Next;
end;
if maxwith<7 then DBGrid1.Columns.Items[i].Width:=trunc(maxwith*8) else
if maxwith<20 then DBGrid1.Columns.Items[i].Width:=trunc(maxwith*7.5) else
DBGrid1.Columns.Items[i].Width:=trunc(maxwith*5.8);
end;
end;

И после выполнения
Query1.Close(); Query1.Open();
делал BDGrid1.visible:=FALSE (чтоб не тормозило :о) )
вызывал TableOpen и BDGrid1.visible:=TRUE;

Если кто-то предложит что-то более элегантное, то буду Очень признателен.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
3-76782
Жук
2003-04-04 16:35
2003.04.24
Разбивка поля numeric по разрядам


3-76788
Andrey V.
2003-04-03 06:40
2003.04.24
Appolo / Halycon / Titan / ...


1-77014
dimonf
2003-04-13 12:39
2003.04.24
Как мне заполнить TComboBox записями в с после его Create?


3-76859
Stas
2003-04-08 09:58
2003.04.24
Перекрестный запрос


1-77017
Zheka
2003-04-14 12:36
2003.04.24
Обнуление таблицы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский