Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Использование DevExpress

Автор: nekra
Дата сообщения: 13.04.2006 17:30
Alex1978
Наверное плохо задал вопрос:
меняет данные непосредственно сам пользователь,
grid находиться в режиме редактирования,
пользователь меняет данные именно в колонке в которой установлена сортировка(паример SortIndex=0,SortOrder=soAsc).

Как только он поменял значение ячейки и переходит на другую строчку происходит пересортировка значений в гриде. Получается что строчка перескакивает в другое место.

В качестве примера как необходимо можно привести Excel. Сортировка происходит только один раз когда пользователь нажимает сортировать. Далее как он бы не изменял данные, позиции строк остаются на своих местах.
Автор: Bulbash
Дата сообщения: 14.04.2006 10:12
Возникла следующая проблема: Пользователю необходима сортировка данных по колонке. При ее включении после сохранения новой записи происходит ее перемещение в гриде согласно условию сортировки. Я хочу добиться следующего: после поста происходит скроллинг грида, записи сортируются -но введенная запись остается на том же месте где было произведено добавление. Как оставить курсор на той же позиции при удалении записия нашел на сайте DevExpress :
FocusedRow, TopRow: Integer;
View: TcxGridTableView;
DataController: TcxGridDataController;
begin
View := cxGrid1.FocusedView as TcxGridTableView;
DataController := View.DataController;

// Remember the top row (the vertical scrollbar position)
TopRow := View.Controller.TopRowIndex;
// Remember the focused row(!) index
FocusedRow := DataController.FocusedRowIndex;
DataController.DeleteFocused;

// After deletion the same row must be focused,
// although it will correspond to a different data record
DataController.FocusedRowIndex := FocusedRow;
// Restore the top row
View.Controller.TopRowIndex := TopRow;

Можно ли реализовать мою задачу, используя приведенный выше листинг или каким либо другим способом?
Автор: Alex47
Дата сообщения: 14.04.2006 14:28
Bulbash
Требуется уточнение.
1. Речь идет о вводе новых записей или о редактировании старых?
2. Используется ли для ввода новых записей режим NewItemRow (ввод через верхний box)?
3. В каком состоянии режим SmartRefresh?
Автор: reenoip
Дата сообщения: 14.04.2006 19:05
Поставил на cxGrid "readonly", а где теперь снять этот режим - найти не могу. Смотрел опции как у самого грида, так и DBTableView - всё равно не по глазам (((
Автор: gpi
Дата сообщения: 14.04.2006 20:51
reenoip
cxGrid1DBTableView1.OptionsData.Editing=True
Автор: reenoip
Дата сообщения: 14.04.2006 23:37
gpi, вообще-то, у меня уже стоит "тру" и на "эдит", и на "инсерт", в этом-то весь и косяк. Ставлю отображение привязанного навигатора - при показе грида у него неактивны соответствующие кнопки, такие вот, блин, дела

Добавлено:
Короче, фиг с ним: скинул я его, поставил с нуля. Геморрой с этими настройками, чтоб их...
Автор: Alex47
Дата сообщения: 15.04.2006 08:40
nekra
Делал нечто похожее с помощью сортировки по дополнительной колонке с номерами строк. Идея такая (идея, а не реализация).
Создается дополнительная unbound column с номерами строк. Когда вы редактируете поле в основной колонке с сортировкой, то неизменность визуальной позиции строки обеспечивает сложная сортировка по двум колонкам: сначала по колонке номеров, а потом по основной колонке. Колонку с номерами можно сделать и невидимой.
Автор: nekra
Дата сообщения: 15.04.2006 13:19
Alex47
Тоже думал о такой идее, но думал что есть метод более простой.
При реализации данной идеи возникает вопрос, если при добалении новой записи делать Insert, а не Append, то как определить когда нужно заполнять колонку с номерами. (Ведь надо все номера в строчках которые ниже увеличить на 1)?

P.S. В гриде не нашел события типа BeforeInsert.
Автор: vadgor
Дата сообщения: 15.04.2006 13:24
привет всем!!! подскажите пожалуйста, как сделать так, чтоб в QuantumGrid после выбора фильтра в одном столбце, в другом столбце появлялись в списке фильтра только те значения, которые доступны уже в отфильтрованных данных???? заранее благодарен..
Автор: Alex47
Дата сообщения: 15.04.2006 16:57
nekra
У меня Insert идет через NewItemRow (box в вехней части view). Поэтому новая строка всегда будет последней. Присвоение ей номера я делаю в AfterPost DataSet:
if State = dsInsert then // State - состояние DataSet, запомненное в BeforePost
. ..
Index := TcxGridDBTableView(cxGrid1.FocusedView).DataController.FocusedRecordIndex;
TcxGridDBTableView(cxGrid1.FocusedView).DataController.Values[Index,0] := Index + 1;

Добавлено:
vadgor
Можно в обработчике View.DataController.Filter.OnGetValueList
сформировать самому список фильтра - AValueList
Автор: nekra
Дата сообщения: 15.04.2006 18:00
Alex47
Спасибо буду пробовать.
Кстати, таже примерно такая же проблема, появляется если установлен фильтр на колонке, и пользователь меняет данные, только тут строки просто исчезают. Наверное идея с unbound колонкой может помоч и тут.
Автор: Alex47
Дата сообщения: 15.04.2006 18:58
nekra
Чтобы при добавлении или редактированиине строк не было их пропадания, я фильтр программно сбрасываю.
В моем случае фильтр сбрасывается, когда фокус перемещается на колонку NewItemRow.
Автор: nekra
Дата сообщения: 15.04.2006 20:14
Alex47
В моем случае фильтр сбросить не получиться, так как не позволяет специфика приложения. Сейчас фильтр на гриде отключен совсем, а фильтрация осуществляется в дата сете при выборке из БД. Перед изменением фильтра данные введеные пользователем сохраняются(В дата сете установлен флаг ChachedUpdates).
Автор: Bulbash
Дата сообщения: 17.04.2006 12:01
Alex47
1. При вводе новых записей и при редактировании имеющихся, если изменяется значение поля, по которому в данный момент отсортирован грид.
2. NewItemRow не используется
3. SmartRefresh - False;
То есть если запись добавлена или изменено значения поля сортировки - грид ставит ее согласно условия, т.е. кусор перемещается в сетке. Я хотел добиться чтобы все это было так + отсортированная запись становилась на туже позицию в сетке на которой находилась до редактирования. Пробовал отключать программно сортировку- но после этого начинались другие траблы - типа Control has not parent.. в календарях и такое подобное. Хочется программно отсортированную строку передвинуть в гриде на ее позицию на момент редактирования, а то юзвери пугаются всяких перемещений, котроые они не задавали
Автор: Vic
Дата сообщения: 17.04.2006 15:26
Вопрос никак победить немогу, глюк это или что? Ситуация есть колонка cxGridDBBandedColumn, поле типа float, ставлю в пропертях выравнивание по центру, показывает все правильно, компилю проект, показывает с выравниваем, по правому краю, девки от марта, билдер 6-ой, поле типа стринг выравнивает, все правильно, хочешь по центру, хочешь, как хочешь, что-то недогоняю?
Автор: vshersh
Дата сообщения: 17.04.2006 15:32
Vic
Попробуй Alignment самого филда выставить (в наборе данных)
Автор: Vic
Дата сообщения: 17.04.2006 15:47
Отбой сам дурак, сохраняю настройки окон, вот он и брал их из старых сохраненных
Автор: EAV
Дата сообщения: 17.04.2006 18:47
дык по умолчанию не надо сохранять
Автор: korobovmax
Дата сообщения: 18.04.2006 17:37
В барах 5 при использовании стиля bmsXP (при включённых темах XP) нижние края картинок у пунктов меню искажены.
Исправляется просто установкой StretchGlyphs в Фолс (по умолчанию - труу).

Добавлено:
Ой, забыл.
Напомните, как отключать тень у бар итемсов.
Автор: Alex47
Дата сообщения: 20.04.2006 08:38
Bulbash

Цитата:
Я хотел добиться чтобы все это было так + отсортированная запись становилась на туже позицию в сетке на которой находилась до редактирования.

1. Такого функционала можно добиться используя сортировку по дополнительной Unbound column - смотри мои посты выше.
2. Эмулировать поведение Excel (касательно сортировки) можно еще так - для не очень больших таблиц. Закачивать данные, просматриваемые в Grid в таблицу в памяти, например в kbmmemtable1. В Grid родную сортировку отключить. Сделать свой вариант статической сортировки на основе двух таблиц: kbmmemtable1 и kbmmemtable2.
kbmmemtable1 не использует индексов, на нем висит Grid.
kbmmemtable2 используется для сортировок, имеет индексы. Данные в kbmmemtable2 для сортировки закачиваются из kbmmemtable1 и после сортировки возвращаются в kbmmemtable1.
Автор: ChSerg
Дата сообщения: 20.04.2006 11:44
Пробую использовать TPngImageList в dxBar. Иконки отображаются неправильно. Может, у кого-то получилось? Буду благодарен за любую информацию...
Автор: xokc
Дата сообщения: 20.04.2006 16:54
ChSerg
У меня нормально работает с PNG и полупрозрачностью. Но пришлось немного пропатчить исходники в dxBar.pas. Могу поделиться.
Автор: reenoip
Дата сообщения: 20.04.2006 16:56
По поводу cxScheduler. Скажите, какую роль выполняет пустая область, находящаяся под календарём (при первой загрузке компоненты).
Поюзал эту компоненту в действии... Сохранял данные, делал планировку, расписание - она ничем не заполняется. Область эта вообще должна чем-нибудь заполняться, нет?

Я к тому, что хочу забить это место своими контролами. Не закрою ли я нужную инфу, которую сейчас - при пробных играх с компонентой - не вижу.
Спасибо.
Автор: ast1
Дата сообщения: 20.04.2006 17:25
xokc
Тоже с этим мучался, поделись плиз...
Автор: korobovmax
Дата сообщения: 20.04.2006 19:34
reenoip, эта область создана для того, чтобы в неё помещать свои контролы (хотя её можно и совсем выключить, чтобы больше месяцев помещалось). Смотрите свойство шедуллера ControlBox и почитайте справку по нему.
Автор: ChSerg
Дата сообщения: 20.04.2006 20:35
xokc

Так я об этом и спрашиваю.

Жду с нетерпением.
Автор: Vic
Дата сообщения: 21.04.2006 09:55
Помогите убрать в Гриде фокус на строку, т.е. надо сделать так, чтобы небыло выделения активной строки
Автор: Alex47
Дата сообщения: 21.04.2006 13:07
Vic

Цитата:
Помогите убрать в Гриде фокус на строку, т.е. надо сделать так, чтобы небыло выделения активной с

Вот, что отвечает DevExpress:
"You can specify a style for the active selection of a grid View using the
View's Styles.Selection property."
Автор: xokc
Дата сообщения: 21.04.2006 22:22
ast1
ChSerg
http://rapidshare.de/files/18595095/dxBar.zip.html
Это патч для файла dxBar.pas.
В прилагаемом коде приведена часть функции, которая рисует картинки на кнопках TdxBar.
Нужно в ней найти строки с комментарием //ok+ и добавить в соответствующие места файла dxBar.pas, после чего пересобрать ExpressBar.
Далее, для того чтобы код работал надо у TPngImageList поставить Tag = 594 (бзик у меня такой). Кто не справится - вопросы в ПМ.
Автор: vcrank
Дата сообщения: 22.04.2006 10:45
Несколько простых вопросов, на которые я жажду получить ответы от мастеров :
1. Где в сетке указать, чтобы данные выравнивались по центру (горизонтально и вертикально)
2. TdxComponentPrinter. Можно ли указать какие колонки печатать из сетки?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Kylix


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.