![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как поменять столбцы местами? [D2005]
И. Павел © (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]А колонки все независимы? Обязательно все показывать? Пользователь не будет воспринимать данные. Хотя, тебе виднее.