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

» Использование DevExpress (часть 4)

Автор: maratea
Дата сообщения: 27.01.2010 06:32
Всем добрый день.
Однажды мне тут уже помогли, обращаюсь снова)

1.
Вот так выглядит мое приложение:


При смене периода и последующем нажатии кнопки "Обновить" все возвращается именно в такое состояние, как на картинке. То есть если пользователь потыкал на плюсики, какие-то группы раскрыл, а какие-то свернул, то все это теряется. А нужно, чтобы сохранялся тот же вид - те же группы свернуты, те же развернуты. Надеюсь, понятно объяснила) Пожалуйста, подскажите, как к этому подступиться.

2.
И второй вопрос: есть ли возможность обрабатывать правый клик на гриде? В событиях не нашла. Нужно для маленькой менюшки с пунктами "свернуть все", "раскрыть все".

Спасибо!

Добавлено:
По первому вопросу нашла неутешительный вердикт -

Цитата:
А вот собственно никак. Где-то тут раньше это уже обсуждалось.



Цитата:
Я делаю это ручками - прошелся по гриду, сохранил все состояния (свернуто/развернуто) и ID записи. ПОтом при открытии открываю то что было открыто раньше.


В связи с чем вопрос - какие именно ID нужно запоминать, как к ним обращаться? И разве при обновлении грида эти ID не могут поменяться? Данных-то может стать больше.
Автор: Man Without Face
Дата сообщения: 27.01.2010 08:22
maratea

Цитата:
И второй вопрос: есть ли возможность обрабатывать правый клик на гриде? В событиях не нашла. Нужно для маленькой менюшки с пунктами "свернуть все", "раскрыть все".

У меня реализован клик на гриде через компонент PopupMenu, попробуй с ним.


Добавлено:
maratea
Так же потребуется компонент cxGridPopupMenu
Автор: maratea
Дата сообщения: 27.01.2010 08:45
Man Without Face
спасибо большое! всё отлично работает)

Добавлено:
Но первый вопрос еще актуален! =\
Автор: tanaseduard
Дата сообщения: 27.01.2010 10:14
Всем драсте. Есть проблема при использовании BarManager.
Ситуация. Ставим строку бара, на нее ставим BarPopupEdit.
Создаем еще 1 форму. Ее указываем как PopupControl в PopupEdit.
На вторую форму ставим еще 1 BarManager и создаем бар. Ставим в нем кнопку.
Запускаем. В итоге при нажатии на PopupControl выскакивает форма но кнопка на баре этой формы не активна!!!!!.
Если на форму первую кинуть отдельно простой TcxPopupEdit и указать вторую форму то все работает ок.
В итоге если вызывать с BarPopupEdit любой обьект который имеет в себе еще строку бара то все ее елементы не активны, если делать это не с BarPopupСontrol а с сxPopupEdit то такой проблемы не наблюдаеться.
Автор: dimm78
Дата сообщения: 27.01.2010 10:21

Цитата:
maratea


Цитата:
При смене периода и последующем нажатии кнопки "Обновить" все возвращается именно в такое состояние, как на картинке. То есть если пользователь потыкал на плюсики, какие-то группы раскрыл, а какие-то свернул, то все это теряется. А нужно, чтобы сохранялся тот же вид - те же группы свернуты, те же развернуты. Надеюсь, понятно объяснила) Пожалуйста, подскажите, как к этому подступиться.


Не все так неутешительно))) Стандартных методов для сохранения состояния грида действительно нет..
но есть возможность сделать это самим... Вот решение этого вопроса с сайта технической поддержки... Делал у себя - все работает...

http://www.devexpress.com/Support/Center/p/Q213558.aspx?searchtext=Save&p=T1|P0|83
Автор: maratea
Дата сообщения: 27.01.2010 11:08
dimm78
оо, интересно. покопаюсь, спасибо!
Автор: vladman
Дата сообщения: 27.01.2010 11:40
maratea

Цитата:
Но первый вопрос еще актуален! =\

Некий Roeland Van Heddegem предложил свое решение, которое DevExpress поместило в Knowledge Base.
How to save and then restore the Grid's layout
Автор: maratea
Дата сообщения: 27.01.2010 11:52
vladman
ага, вон выше тоже ссылку дали. Сижу разбираюсь)

Добавлено:
блин, понять не могу никак...
Вот написана там процедура SaveState. В ней в цикле для каждой записи с Expanded = true вызывается процедура SaveRecord:

Код:
SaveRecord(AView, AView.ViewData.Records[i])
Автор: VadimLou
Дата сообщения: 28.01.2010 03:03
может там GridRecord один и то-же ...
Автор: maratea
Дата сообщения: 28.01.2010 06:55
разобралась. Проблема была в том, что у View отсутствовало значение KeyFieldNames, из-за этого GetRecordId все время возвращал Null.

Ответ нашла тут, может, кому еще пригодится:
http://www.devexpress.com/Support/Center/p/DB49393.aspx

Всем большое спасибо за помощь! =)
Автор: fortezza
Дата сообщения: 29.01.2010 10:06
Здраствуйте,
кто нибудь сталкивался с такой проблемой, что при вводе данных в таблице, если нажать на столбец, а потом сохранить вылетает сообщение об ошибке "Field ID is required, but not supplied"? это связанно с тем что данные кэшируются (CashedUpdate = true) и ID не проставляется и как быть?

Компоненты доступа к данным (Zeos)
Автор: Man Without Face
Дата сообщения: 29.01.2010 10:27
Есть ли какое нибудь свойство у cxGrid'a в кот. можно указать, что налл ячейки будут только readonly. Или как это можно реализовать? Заранее благодарен.
Автор: tanaseduard
Дата сообщения: 29.01.2010 10:31
В свойствах Column.Options.Editing:=False
Автор: Man Without Face
Дата сообщения: 29.01.2010 10:48
tanaseduard
Да, но нужно чтобы пустые ячейки не редактировались, а там где есть записи - редактировались.
Автор: tanaseduard
Дата сообщения: 29.01.2010 10:55
Иметься ввиду где Cell is null?
Попробуйте событие OnGetPropertiesForEdit.
В нем передаеться номер строки по нему вытягиваете данные о ячейке и ставите AProperties в ReadOnly.
Автор: Man Without Face
Дата сообщения: 29.01.2010 10:59
tanaseduard

Цитата:
В нем передаеться номер строки по нему вытягиваете данные о ячейке

Если можно поподробнее (как это сделать, никогда не сталкивался). Спасибо.

Автор: tanaseduard
Дата сообщения: 29.01.2010 15:34
Procedure TForm1.cxGrid1TableView1Column2GetPropertiesForEdit(
Sender:TcxCustomGridTableItem;ARecord:TcxCustomGridRecord;
Var AProperties:TcxCustomEditProperties);
Begin
If (ARecord.Index Mod 2=0) Then
AProperties:=rep_dis.Properties
Else
AProperties:=rep_en.Properties;
End;

Ставишь на форму TcxEditRepository. Делаешь там 2 компонента(разрешенный и нет)
и вот по событию обрабатываешь.
В примере показано что для все четных строк запретить редактирование.
Автор: fortezza
Дата сообщения: 29.01.2010 15:34
можно запретить сортировку сразу всех столбцов cxGrid?
Автор: tanaseduard
Дата сообщения: 29.01.2010 15:38
Повтор.
Всем драсте. Есть проблема при использовании BarManager.
Ситуация. Ставим строку бара, на нее ставим BarPopupEdit.
Создаем еще 1 форму. Ее указываем как PopupControl в PopupEdit.
На вторую форму ставим еще 1 BarManager и создаем бар. Ставим в нем кнопку.
Запускаем. В итоге при нажатии на PopupControl выскакивает форма но кнопка на баре этой формы не активна!!!!!.
Если на форму первую кинуть отдельно простой TcxPopupEdit и указать вторую форму то все работает ок.
В итоге если вызывать с BarPopupEdit любой обьект который имеет в себе еще строку бара то все ее елементы не активны, если делать это не с BarPopupСontrol а с сxPopupEdit то такой проблемы не наблюдаеться.

Добавлено:
fortezza
[q][/q]

Можно.
Первый вариант это во всех Column выставить options.sorting:=False;
Второй в TableView.OptionsCustomize.ColumnSorting:=False
Автор: VadimLou
Дата сообщения: 29.01.2010 17:24
fortezza

Цитата:
D не проставляется

Значит нужно проставлять то чего недостаёт на событи OnInsert или OnPost
Автор: vladman
Дата сообщения: 31.01.2010 02:41
Некоторое затишье в теме натолкнуло меня на мысль проанализировать историю сообщений в этой ветке начиная с первой ее части. Может кому тоже будет полезно/интересно.
[more=Результаты, предлагаю вашему вниманию]

Что интересного.

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

В распределении по месяцам - два явных, причем равных, пика. Июнь и Декабрь. Почему? Сессия у народа. Другие объяснения этого факта тяжело найти. Т.е., можно предположить, что среди посетителей есть некоторая группа студентов. Причем Ноябрь и Май не очень активны по сравнению с соседними месяцами, т.е. студенты "правильные" - все откладываем на последний день . А так как Январь и Июнь тоже особо не выделяются, то это еще раз подчеркивает "правильность" студентов - двоечников не наблюдаем. Февраль самый неактивный, а может и безпроблемный месяц в году. Как раз завтра наступит. . Также можно выделить сентябрь (уступает только двум "сессийным месяцам") - жажда знаний, новые проекты.

Распределение по годам.
2003 и 2004 года можно не рассматривать из-за совсем малого количества постов.
С 2006 интерес к продуктам Devexpress постепенно падал. Но прошлый, 2009, год превзошел по интересу как минимум в два раз все предыдущие.

Распределение сообщений по часам суток.
Война, войной (а кто сказал что программировать легко? ), а обед по расписанию. А расписание таково - обед у народа, в основном, с 13 до 14. Самые активные часы - 11-13 и 14-15. Дальше продуктивность резко падает. А может и вопросов не возникает, и все само собой решается . Также интересно, что в 10-11 работают лучше чем в 17-18. Что тоже, впрочем, понятно. . Минимум сообщений - с 4 до 5 ночи. Есть и ранние пташки (6-8 часов утра). А может это и засидевшиеся - тяжело сказать. .

По количеству сообщений в разрезе авторов могу отметить только то, что 20 человек создали практически 50 процентов всех сообщений. Всего в теме за все время ее существования отметилось 628 человек.
Вот, собственно, и все.
[/more]
Автор: JohnSilver182
Дата сообщения: 31.01.2010 10:39
Интересное исследование . Мне вот токо интересно как студенты юзают проект с Девками а потом несут на комп преподу ?
Автор: vladman
Дата сообщения: 31.01.2010 12:01
На DevExpress Channel появилось два новых видео касательно VCL:
VCL Printing - New Features in Version 4
и
VCL Printing - Print Preview Dialog Styles
Автор: neznayka3
Дата сообщения: 01.02.2010 07:53
подскажите, как в гриде в header поместить checkbox? хочу выделять записи по клику на нем.
Автор: vladman
Дата сообщения: 01.02.2010 10:00
neznayka3

Цитата:
подскажите, как в гриде в header поместить checkbox? хочу выделять записи по клику на нем.

How to add CheckBox to the column header of a grid
Автор: fortezza
Дата сообщения: 01.02.2010 10:04
VadimLou

Цитата:
fortezza

Цитата:D не проставляется
Значит нужно проставлять то чего недостаёт на событи OnInsert или OnPost

что значит нужно? откуда брать ID, если я вставляю новую строку, все КЭШИРУЕТСЯ(не отсылается на серв до определенного момента), а столбец автоинкрементный? Можно конечно использовать счетчик, но я не могу до конца понять логики ошибки


Цитата:
fortezza

Здравствуйте,
Кто-нибудь сталкивался с такой проблемой, что при вводе данных в таблице, если нажать на столбец, а потом сохранить вылетает сообщение об ошибке "Field ID is required, but not supplied"? это связанно с тем что данные кэшируются (CashedUpdate = true) и ID не проставляется и как быть?
Компоненты доступа к данным (Zeos)


Если проходить пошагово, то в момент нажатия столбца, вызывается метод Post, у записи меняется статус c Insert на Edit (не пойму почему, это не правильно!!) и соответственно, когда нажимаю сохранить, компонент пытается изменить (а не вставить!) мою запись в таблице на сервере, потому что у неё статус edit, но не может этого сделать потому что id у неё нет. (а id нет потому что я запись вставляю)

Не могу понять, чья это ошибка, то ли моя, то ли Zeos, то ли cxGrid??
Автор: afiget
Дата сообщения: 01.02.2010 11:42
fortezza
Ошибку

Цитата:
Field ID is required, but not supplied

что выдает: компонент локально или сервер?

Если первое, то все вроде правильно: вы не заполнили все данные, поэтому датасет ругается. Значит нужно либо установить у поля Required=false, либо обработать ошибку пользователя, который ввел не все данные.
Если второе и если у вас установлены все свойства датасет правильно, то похоже все таки на баг в компонентах доступа, отсылающих на сервер данные без локальной проверки хотя бы Required-полей.

Статус записи при CashedUpdate = true у вас может быть только локальный, поэтому не обращайте на него внимания.
При последовательных изменениях insert, post, edit, post датасет на сервер отошлет оба запроса: на вставку и на изменение. Смотрите что показывает монитор.
Автор: SANiMirrorOfLight
Дата сообщения: 01.02.2010 12:31
Здравствуйте.
Я использую cxPropertiesStore. Проблема в том, что если в программе я вызываю OpenPictureDialog то при закрытии программы выдаётся ошибка что cxPropertiesStore не может найти файлик конфигурации, и ищет он его там откуда я открывал картинку. Я так понял изменяется директория поумолчанию(или как её назвать незнаю правильно). Подскажите как мне её выставить обратно?
Автор: fortezza
Дата сообщения: 01.02.2010 12:48
afiget

данные заполняются полностью мной (кроме ID), разница лишь в том что если в процессе нажать на сортировку (группировку, фильтр), а потом дозаполнить поля - появится ошибка, если сортировку не делать или сделать после того как все поля заполнены - ошибка не появится.

Думаю ошибку выдает компонент локально. Даже если я установлю Required=false чем это поможет? ведь опять же повторяюсь, стутус записи каким-то образом после сортировки меняется с Insert на Edit (при сохранении запись имеет уже др статус), и он пытается изменить уже якобы существующюю запись, но ID у неё не находет, понятно почему. Правила для вставки изменения и удаления у меня описаны в соответствующих свойствах компонента ZUpdate. При вставке ID не используется, а вот при изменении - да. CashedUpdate = true + ZUpdate - не могу не принимать это во внимание.

Вообще как посмотреть что происходит во время клика по заголовку столбца?
Автор: afiget
Дата сообщения: 01.02.2010 18:25
fortezza

Цитата:
Вообще как посмотреть что происходит во время клика по заголовку столбца?

Это существенное уточнение.
Post происходит при скроле датасета. Потому и статус меняется.

ЗЫ
Но, честно говоря, мне не нравится поведение вашего датасет. У меня с включенным CashedUpdate SDAC прекрасно работает и на автоинкремент не ругается. Вы уверены, что все настройки датасет правильные?
Кстати, на форуме Зеос есть несколько тем с похожей проблемой, смотрели там?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


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