Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ненавистный DBGrid, ширина колонки


Страницы:   1 2

Prohodil Mimo ©   (2008-02-06 16:47:00) 

Решил сделать форму с DBGrid-ом растягиваемой, следовательно надо и колонки разрешать растягивать.
Вот и натолкнулся ещё на одну проблему:
Если изменить размер колонки (хоть мышкой, хоть DBGrid1.Columns[0].Width := 100;), а потом
сделать
DBGrid1.DataSource.DataSet.Close;
DBGrid1.DataSource.DataSet.Open;
ширина колонки увеличивается примерно на 20 пикселей, причём не только у той, которой меняли ширину, а у всех в гриде.
В DataSet-е грида поля добавлены, если не добавлять, ширина сбрасывается на изначальную.

Возможно ли с этим бороться или грид просто не способен адекватно себя вести?

как пример для испытаний, можно взять всё тот же
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1199805755&n=1
[24], только надо добавить поля в Query.


Германн   (2008-05-24 00:58:00) [1]


> sniknik ©   (07.02.08 00:33) [15]

Вот что самое смешное. В своих программах на BDE+Paradox я как раз всегдаделал статические TxxxField компоненты через соответствующий редактор. А вот в первой же программе на ADO+FB почему-то "пошёл другим путём".


Германн   (2008-05-24 00:54:00) [2]


> sniknik ©   (23.05.08 02:05) [25]


> Johnmen ©   (23.05.08 09:28) [26]

Не очень понял, точнее совсем не понял. Но запомню на будущее, что проблемы с русскими названиями возможны не только с реальнымиименами полей в таблице.


Prohodil Mimo   (2008-05-23 19:37:00) [3]

Stas ©   (23.05.08 11:42) [30]

это решено было ещё в [3]

а сторонним я не пользуюсь, за исключением FIBPlus и FastReport (да и то не везде). Всё остальное своё.


MsGuns   (2008-05-23 13:01:00) [4]

т.е. сделал компонент ? и теперь носишь его за собой, как черт торбу ?


Reindeer Moss Eater   (2008-05-23 12:47:00) [5]

у меня экономится не меньше, а даже больше.
русские названия колонок либо через дизайнтайм филды датасета, либо через колонки грида (если датасета на абстрактной форме нет)
а сохранение индеска и ширины колонок - опция самого грида (так же как и сама опция "сохранять". Это тоже опция грида )
Когда-то было как у тебя через библиотечные модули с именами xxx_common.pas, но потом надоело и перенес этот функционал в сам грид и многое другое тоже.


MsGuns   (2008-05-23 12:41:00) [6]

Есть такой побочный эффект, поэтому в эксплоререх я и не сохраняю ничего. Обезьянничаю с того же мелкософта (QA).
А вот в клиентских приложениях, где массы сеток, предназначенных, как правило, для отображения одних и тех же датасетов, применяю вовсю. В дизайне лишь присваиваю филдам кэпшины (DisplayLabel) и выставляю форматы для дат и чисел,  с размерами колонок вообще не вожусь. Ты знаешь, экономится масса времени ;)


Reindeer Moss Eater   (2008-05-23 12:02:00) [7]

Это если у меня заранее известен датасет. А если нет ?

То есть библиотечная процедура сохраняющая ширины колонок принимает параметром грид (датасет которого может на момент сохранения быть любым ) а после когда процедуру вызывают для восстановления ширины колонок датасет грида тоже может быть другим и не обязательно таким же как при предыдущем сохранении.


MsGuns   (2008-05-23 11:57:00) [8]

>Reindeer Moss Eater ©   (23.05.08 11:43) [31]
>А чем второй и последующие запуски отличаются от запуска сразу после установки если ничего не запоминаем?

Если "ничего не запоминаем", то ничем, кроме одного - вместо десятиэкранной (по горизонтали) сетки, в которой за раз оботражается одно-два поля с океанами пустого места, получаем компактный вид с кре-гле обрезанной информацией - зато видим хотя бы список всех или почти всех колонок за раз.

Про "запоминание" в том посте тоже есть


MsGuns   (2008-05-23 11:54:00) [9]

>Reindeer Moss Eater ©   (23.05.08 11:41) [29]
>Первичная настройка и дизайне неплохо делается.

Это если у меня заранее известен датасет. А если нет ? Например, при разработке какого-нибудь эксплорера БД. Заранее ничего неизвестно


Reindeer Moss Eater   (2008-05-23 11:43:00) [10]

Речь шла о ПЕРВИЧНОЙ настроке, когда приложение только установлено (переустановлено)

А чем второй и последующие запуски отличаются от запуска сразу после установки если ничего не запоминаем?


Stas   (2008-05-23 11:42:00) [11]

>Prohodil Mimo ©   (06.02.08 16:47)  
В DBGRIDEh это решено.


Reindeer Moss Eater   (2008-05-23 11:41:00) [12]

Первичная настройка и дизайне неплохо делается.


MsGuns   (2008-05-23 11:40:00) [13]

>Не надо ничего вычислять. Надо просто запоминать ширину выставленную >пользователем. А заодно и индекс.

Речь шла о ПЕРВИЧНОЙ настроке, когда приложение только установлено (переустановлено)


Reindeer Moss Eater   (2008-05-23 09:47:00) [14]

Мне больше нравится способ настроек колонок грида, вынесенный в некую библиотечную процедуру, вычисляющую ширину колонок таким образом:

Не надо ничего вычислять. Надо просто запоминать ширину выставленную пользователем. А заодно и индекс.


Johnmen   (2008-05-23 09:28:00) [15]


> Германн ©   (23.05.08 01:26) [24]

Тут, если говорить образно, некошерность того же плана, что и именование классов. Ну там ТМойСуперКласс. Да, по-русски нельзя. Но это сегодня, и идеологически ничему не противоречит, вроде бы...
Я всего лишь провожу четкую грань между клиентской программой, где можно извращаться, как хочешь, и сервером, "придерживающимся" языка оригинала.
Вышесказанное - ИМХО. Никому не навязываю. Но если вдруг что - я предупреждал...
А проблемы будут, напр., при работе с IB/FB. Т.е. проблема одна - работать не будет вовсе :))


> Кристина   (22.05.08 21:17) [22]

Некрофилия здесь не приветствуется. Если есть вопросы - новая ветка.


sniknik   (2008-05-23 02:05:00) [16]

> Чем это не кошерно? И какие проблемы "м.б."?
прочитай [17].


Германн   (2008-05-23 01:26:00) [17]


> Johnmen ©   (07.02.08 09:24) [18]
>
>
> > Германн ©   (07.02.08 01:00) [16]
> > А я как раз давеча впервые в жизни написал программульку,
>
> > где русские названия колонкам даются в самом запросе через
> > "AS". Это что, некошерно? Или какие-то проблемы могут
> возникнуть?
>
> Абсолютно некошерно. Фу...:)
> И проблемы м.б.
>

Раз уж кто-то поднял сей вопрос, то...
Жень! Чем это не кошерно? И какие проблемы "м.б."?


MsGuns   (2008-05-23 00:15:00) [18]

Это плохой способ, ибо он абсолютно не учитывает специфику данных в полях. Сам компонент при автоматической разметке колонок (сразу после открытия связанного датасета) следует такому нехитрому алгоритму.

1) Определяется ширина текста заголовка колонки (назовем ее wt) - по умолчанию текст заголовка = названию поля датасета (TField.FieldName)
2) Определяется ширина текста данных колонки, вычисляемая из св-ва TField.Size, которое , в свою очередь, автоматически вычисляется датасетом сразу после открытия. (wf)
3) Ширина колонки = Max(wt,wf)

Это при условии отсутствия "ручных" настроек коллекций TFields и TColumns в дизайне или каким -либо другим образом в ран-тайме до открытия НД. При этом надо помнить, что для полей-стрингов, получаемых с алиасом либо вычисляемых, ширина определяется многими серверами с весьма солидным "запасом". Поэтому неизбежен эффект колонок во весь грид или около того.

Мне больше нравится способ настроек колонок грида, вынесенный в некую библиотечную процедуру, вычисляющую ширину колонок таким образом:
Для нестринговых полей ширина колонок остается неизменной, а для стрингов урезается до 200 (или сколько указано вх.параметром) пикселей.
Пользователю всегда проще расширить нужные колонки для требуемой вместимости, чем сужать их, манипулируя в основном гор.скроллом. А если еще и не поленится позаботиться о сохранении-восстановлении текущих параметров (TColumns.SaveToFile/LoadFromFile) после открытия и перед закрытием НД, то получим довольную мордочку милашки-оператора ;)


Кристина   (2008-05-22 21:17:00) [19]

Ребят, а я делала вот так: - высчитывала ширину колонок в процентном соотношении от ширини грида. Колонки разной ширины

procedure TfrmMain.FormResize(Sender: TObject);
begin
DBGrid1.Columns[0].Width:=round(0.05*DBGrid1.width);
DBGrid1.Columns[1].Width:=round(0.15*DBGrid1.width);
DBGrid1.Columns[2].Width:=round(0.2*DBGrid1.width);
DBGrid1.Columns[3].Width:=round(0.25*DBGrid1.width);
DBGrid1.Columns[4].Width:=round(0.1*DBGrid1.width);
DBGrid1.Columns[5].Width:=round(0.1*DBGrid1.width);
DBGrid1.Columns[6].Width:=round(0.1*DBGrid1.width);
end;


Prohodil Mimo   (2008-02-07 13:55:00) [20]

sniknik ©   (07.02.08 12:49) [20]

> вернее не глюками, а просто не пониманием правильной в
> общем то работы


сейчас не могу вспомнить, что именно было причиной, но помню, что потратил несколько часов, пока не вспомнил, что я колонки в грид добавил. Возможно что то не получалось из-за того, что я изменил или переименовал поля в датасете, а в гриде колонки не изменил. Но точно не помню, более 10 лет прошло.


> а отключение контролов при изменении данных, не
> используешь тоже потому, что когдато "столкнулся с
> какими-то глюками"?

вот не знал, что так надо, спасибо, что хоть кто то подсказал. Лучше поздно, чем никогда. В книжках, на которых учился, такого ни где не было.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо