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