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.


sniknik   (2008-02-07 12:49:00) [21]

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

и?

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

меняй мировоззрение... на самом деле это не "глюки изза этого", а изза тебя, изза того как ты это используешь, и соответствуют ли твои представления о нормальной работе реальности.


Prohodil Mimo   (2008-02-07 12:24:00) [22]

sniknik ©   (07.02.08 0:33) [15]
в сам грид колонки никогда не добавляю, в самом начале программирования столкнулся с какими-то глюками из-за этого, с тех пор не использую.
Да и частенько использую один грид для отображения разных датасетов.


Johnmen   (2008-02-07 09:24:00) [23]


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

Абсолютно некошерно. Фу...:)
И проблемы м.б.


sniknik   (2008-02-07 08:26:00) [24]

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

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


Германн   (2008-02-07 01:00:00) [25]


> sniknik ©   (07.02.08 00:33) [15]
>
> а, понятно, в гриде то колонок у тебя и нет, а динамические
> пересоздаются. а я както "на автомате" туда в первую очередь
> вношу (русские названия колонкам дать). а в датасет необязательно.
>
>

А я как раз давеча впервые в жизни написал программульку, где русские названия колонкам даются в самом запросе через "AS". Это что, некошерно? Или какие-то проблемы могут возникнуть?


sniknik   (2008-02-07 00:33:00) [26]

а, понятно, в гриде то колонок у тебя и нет, а динамические пересоздаются. а я както "на автомате" туда в первую очередь вношу (русские названия колонкам дать). а в датасет необязательно.


Prohodil Mimo   (2008-02-06 23:33:00) [27]

sniknik ©   (06.02.08 19:46) [12]

выложил тут:
база, ехе, исходники (513Кb) http://ddsoftpro.lv/work/test_grid.zip
на всякий случай FB2_embedded (2.34Mb) http://ddsoftpro.lv/work/fb2_emb.zip

писал на скорую руку, а потому путь к базе на c:\test_grid


MsGuns   (2008-02-06 22:28:00) [28]

Можно однако подкрутить TColumns.RebuildColumns


sniknik   (2008-02-06 19:46:00) [29]

> можно без FB
вместо нее лучше положи тестовую базу.


sniknik   (2008-02-06 19:45:00) [30]

давай, можно без FB, есть. (в той ветке писал)

Desdechado ©   (06.02.08 18:04) [9]
про версию тоже писал (D7), и то что у него 2005 оттуда же знаю.
хотя это и нехорошо, исходные данные должны быть здесь, но договорились о версии мы раньше.


Prohodil Mimo   (2008-02-06 18:21:00) [31]

Desdechado ©   (06.02.08 18:04) [9]
Если бы вы еще договорились о версии Дельфи...


такое давно заметил ещё в 3, сейчас на 2005.

sniknik ©   (06.02.08 18:01) [8]
Если хочется посмотреть на глюк, могу скомпилировать пример и выложить в нете вместе с исходниками и FB Embedded.


Desdechado   (2008-02-06 18:04:00) [32]

Если бы вы еще договорились о версии Дельфи...
У меня в 7-ке плюкалась.


sniknik   (2008-02-06 18:01:00) [33]

ага


Prohodil Mimo   (2008-02-06 17:58:00) [34]

sniknik ©   (06.02.08 17:52) [6]

и ширина осталась как и до нажатия кнопки?


sniknik   (2008-02-06 17:52:00) [35]

> перед нажатием на кнопки надо ширину колонки изменить, потом кнопку жать.
так и делал.


Prohodil Mimo   (2008-02-06 17:50:00) [36]

sniknik ©   (06.02.08 17:22) [3]
не получилось... по тому же примеру (тип полей?)


а тип полей роли не играет.
Если интересно:
перед нажатием на кнопки надо ширину колонки изменить, потом кнопку жать.


Prohodil Mimo   (2008-02-06 17:45:00) [37]

sniknik ©   (06.02.08 17:22) [3]
with DBGrid1.DataSource.DataSet do
begin
  DisableControls;
  try
    Close;
    Open;
  finally
    EnableControls;
  end;
end;


Cделал наподобие, только в BeforeClose, AfterOpen - работает.
Спасибо!!!


sniknik   (2008-02-06 17:22:00) [38]

> ширина колонки увеличивается примерно на 20 пикселей
не получилось... по тому же примеру (тип полей?)

но(!) вот это
DBGrid1.DataSource.DataSet.Close;
DBGrid1.DataSource.DataSet.Open;
неправильно. надо так
with DBGrid1.DataSource.DataSet do
 begin
   DisableControls;
   try
     Close;
     Open;
   finally
     EnableControls;
   end;
 end;


Desdechado   (2008-02-06 17:10:00) [39]

Сталкивался с такой фигней, если колонки то прятать, то снова показывать.
Бороть не стал, поменял логику.


Плохиш   (2008-02-06 17:06:00) [40]

В OnBeforeClose сохрани размеры, а в OnAfterOpen установи их из сохранённых


Страницы:   1 2

Наверх

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