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

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

Как поменять столбцы местами? [D2005]


Страницы:   1 2

И. Павел ©   (2010-02-01 14:23:00) 

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

Использую TDBGridEh (TDBGrid+дополнительные возможности). Подскажите, пожалуйста, как можно поменять местами столбцы, тоесть изменить порядок их следования на форме, а не в базе. Желательно поменять местами только два столбца, не меняя позиции остальных.
Пытался использовать свойство DBGridEh.Columns[i].Index:=, но при этом i-му полю автоматически присваивается index=0 а все остальные поля сдвигаются вправо. Можно, конечно, сделать и так, но это довольно запутанно. Может быть есть более удобный способ?


Anatoly Podgoretsky   (2010-02-02 17:08:00) [1]

> Sergey13  (02.02.2010 15:59:26)  [26]

Такой цели не было, но это не проблема.


12   (2010-02-02 17:00:00) [2]


> Sergey13 ©   (02.02.10 16:25) [29]
> ЗЫ: А можно вообще без колонок? Ну типа открылось что-то
> и мне достаточно. 8-)

можно :)
дело в том, что все настройки всех форм/гридов у нас также
>> У меня сохраняются при закрытии формы, и восстанавливаются при открытие.
нов отдельную таблу, чтоб машинонезависимость была.
Как-то упражнялся в чем-то и апдейтнул неудачно. У всех пустота везде. Восстанавливал всем из копии :)


Sergey13   (2010-02-02 16:25:00) [3]

> [27] 12 ©   (02.02.10 16:04)
> чего натворишь при этом - твои проблемы

Да это понятно, у кого проблемы. Но зачем этому способствовать?
ИМХО, конечно, исключительно.

ЗЫ: А можно вообще без колонок? Ну типа открылось что-то и мне достаточно. 8-)


И. Павел   (2010-02-02 16:07:00) [4]


> А если удалить все колонки и заполнить заново в нужном порядке?

Тоже вариант. Странно, что в DBGridEh нет готового метода для сортировки полей. По моему - только этого там и нет :)


12   (2010-02-02 16:04:00) [5]


> Sergey13 ©   (02.02.10 15:59) [26]

у нас (не я писал, правда) - да.
Хоть одни id смотри
чего натворишь при этом - твои проблемы


Sergey13   (2010-02-02 15:59:00) [6]

> [25] Anatoly Podgoretsky ©   (02.02.10 15:13)

И видимость колонок можно изменять?


Anatoly Podgoretsky   (2010-02-02 15:13:00) [7]

> Sergey13  (02.02.2010 15:04:24)  [24]

Никаких проблем с ответственостью, за все время подобный вопрос даже не возникал.
У меня сохраняются при закрытии формы, и восстанавливаются при открытие.


Sergey13   (2010-02-02 15:04:00) [8]

> [23] И. Павел ©   (02.02.10 14:33)

А если удалить все колонки и заполнить заново в нужном порядке?

ЗЫ: Честно говоря - странная задача, если пользователь сам задает видимость колонок. Кто потом будет виноват в том, что "а я не видел"? А с размерами и порядком проще сохранять то что юзер мышкой накрутит прямо в гриде без дополнительных форм.


И. Павел   (2010-02-02 14:33:00) [9]


> Если будет отдельная форма для управления этой лабудой,
> то почему нельзя просто пройти в цикле по всем полям и установить
> индекс и видимость? Слева направо.

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


Sergey13   (2010-02-02 14:23:00) [10]

Если будет отдельная форма для управления этой лабудой, то почему нельзя просто пройти в цикле по всем полям и установить индекс и видимость? Слева направо.


И. Павел   (2010-02-02 14:22:00) [11]


> 12 ©

Да, вы правы - все работает. Просто я сначала что-то напортачил.


> Медвежонок Пятачок ©

Несмежные можно перемещать, но в одну операцию это будет не перестановка двух элементов, а перемещение одного и подгон остальных индексов. Просто алгоритм увеличения/уменьшения индекса на 1 удачно подходит под задачу перестановки.


12   (2010-02-02 14:08:00) [12]

а

if F>S
temp:=F;
>     F:=S;
>     S:=temp;
проверим, и если в другом порядке задали, переставим числа

 ADBGrid.Columns[SIdx].Index:=FIdx;
произошло смещение индекса,

а мы и учитываем его
 ADBGrid.Columns[FIdx+1].Index:=SIdx;

чем не ?


Медвежонок Пятачок   (2010-02-02 14:08:00) [13]

причем отлуп обеим перестановкам. (так как несмежные нельзя перемещать)


Медвежонок Пятачок   (2010-02-02 14:04:00) [14]

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

:)


И. Павел   (2010-02-02 14:02:00) [15]


> 12 ©

Поэтому и получается, что для смежных полей перестановка работает:

0
1
2
3 - перемещаем на 2
4

0 0
1 1
2 3
3 2
4 4

а вот для остальных нужно рещать 'Кубик Рубика' - меняем что-то одно - меняется все остальное :) Впрочем это тоже можно решить - просто разбить перемещение на цепочку перемещений смежных полей.

Если с утверждением про смежные поля я поторопился - пожалуйта, поправьте, ато боюсь дальнейших сюрпризов от программы :)


12   (2010-02-02 13:35:00) [16]

поменять индексы местами -
на самом деле, сначала один индекс получает новый номер, остальные перестраиваются, затем второй получает номер

0
1
2
3 - этот хотим 1м
4

актуальный/бывший
0 0
1 3
2 1
3 2
4 4


И. Павел   (2010-02-02 13:22:00) [17]


> и в чем же проблема?

Проблема уже решена.
Видимо Index можно использовать только чтобы менять местами только смежные поля (для TDBGridEh). Раньше хотел выделять 2 поля и менять их местами, но видимо придется ограничиться кнопками вверх/вниз.


Медвежонок Пятачок   (2010-02-02 11:42:00) [18]

и в чем же проблема?


И. Павел   (2010-02-02 11:01:00) [19]


> А колонки все независимы? Обязательно все показывать? Пользователь
> не будет воспринимать данные.

Пользователи сами настраивают формат - ширину и количество колонок.  Ограничивать их одним экраном не хочется - кто захочет сам так сможет настроить свой формат.


Mike Kouzmine   (2010-02-02 10:55:00) [20]

А колонки все независимы? Обязательно все показывать? Пользователь не будет воспринимать данные. Хотя, тебе виднее.


Страницы:   1 2

Наверх

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