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

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

Автор: alexbozhko
Дата сообщения: 23.04.2009 09:47

Цитата:
А интересно куда ты будеш добавлять новое значение, если у тебя LookUp поле

По нажатию на кнопку вызывается новая форма, в которой и производится добавление записи в связанный DataSet. Точнее, в таблицу, к которой этот DataSet привязан. После чего, происходит обновление. Это все уже реализовано с помощью GridEh . В итоге в выпадающем списке появится вновь добавленное значение.
Естественно, сам LookUp после нажатия на эту кнопку закроется, но при повторном нажатии новый элемент будет уже там. Иными словами, на кнопку эту вешается обработчик.

Добавлено:

Цитата:
А почему нельзя в лукапе просто добавить значение "Добавить элемент", а при его выборе сделать обработчик для создания нового элемента.

Не совсем понял.
Прямо в LookUp, или в связанный с ним набор данных?

Прямо в LookUp, - а как?
В набор данных... Она же (кнопка) должна быть вверху списка всегда. Т.е. я должен скролить список, но первый элемент всегда должен быть первым в списке и в области видимости. Т.е. Приклееным. Как заголовок столбца в гриде. К тому же, кнопка должна отличаться внешне от обычного элемента списка. Т.е., если бы была возможность достучаться как-то да самого выпадающего списка, может что-то и можно было придумать. Но я не знаю как.
Автор: sldaac
Дата сообщения: 23.04.2009 10:17
alexbozhko
используй не LoocuрCombox, butonEdit кажется называется (нет делфи счас, не могу точно сказать) в ней реализована кнопка и список (стрелочка и рядом кнопка), клик на стрелке открывает список для выбора, на кнопку - пишеш код в обработчике нажатия кнопки (вызываеш другую форму)
Автор: Kim006
Дата сообщения: 23.04.2009 12:26
Заметил интересную весч:
AView->Controller->EditingController->Edit->EditingValue.IsNull() действительно принимает значение true если стереть значение из ячейки и на клавиатуре стрелками перейти на другую запись. переход мышью и вызов Post() - ничего не дает (всегда false). Как это можно исправить, и в каком обработчике событий правельнее всего будет проверять этот момент?
Автор: FunCode
Дата сообщения: 23.04.2009 14:30
alexbozhko
А не подходит как вариант следующее:
в Lookup есть событие OnNew...
я у себя его обрабатываю, и если человек ввел
что-то новое - отсуствующее в списке, то я вывожу диалог
с вопросом - "Введенный элемент отсуствует в базе. Добавить?"
если да то вывожу если надо окно с указанием дополнительных
свойств этого элемента для заполнения пользователем,
потом refreshу данные Lookupа и и присваиваю ему полученный
идентификатор и все ...
Автор: jicoff
Дата сообщения: 23.04.2009 14:33
Kim006

А чем не устраивает просто проверить, что редактируемое поле пустое?
Автор: Kim006
Дата сообщения: 23.04.2009 23:59
jicoff
Как, мне это и нужно.
Автор: dc
Дата сообщения: 24.04.2009 07:32
Установил Devexpress .42 на Д2009 и Д2007.
В Д2007 видны все скины а в Д2009 только "UserSkin".
Пробовал переустановить, переустановить и в другом порядке - результат один и тот же.

Никто не встречался с такими странностями?
Автор: afiget
Дата сообщения: 24.04.2009 11:10
Kim006
VarIsNull(MyDataSet.Fields[0].Value)
Автор: jicoff
Дата сообщения: 24.04.2009 12:08
Kim006

Полагаю надо анализировать AView->Controller->EditingController->Edit. Если наследует от TcxCustomTextEdit, то всегда можно свойство Text проверить. А так редактируемое поле всегда соответствует текущей записи, и можно воспользоваться советом afiget

Добавлено:
Правда если нужно анализировать данные до занесения гридом данных в текущую запись, то VarIsNull(MyDataSet.Fields[0].Value) не подходит.
Автор: afiget
Дата сообщения: 24.04.2009 12:49

Цитата:
Правда если нужно анализировать данные до занесения гридом данных в текущую запись

... то нужно воспользоваться событием View.Column.Properties.OnValidate (OnChange, OnEditValueChanged) - в зависимости от задачи. Только нужно помнить о том, что в некоторых событиях есть 2 значения: до изменения (старое) и после (новое).
Автор: jicoff
Дата сообщения: 24.04.2009 15:26
afiget

Конечно, и эти события можно использовать, но одни применимы только в момент ввода данных, а OnValidate - в момент попытки записать в дата-поле. Весь вопрос момент проверки EditingValue, даже OnValidate не поможет, если нажать на кнопку без фокуса.
Автор: afiget
Дата сообщения: 24.04.2009 19:20

Цитата:
Конечно, и эти события можно использовать, но одни применимы только в момент ввода данных, а OnValidate - в момент попытки записать в дата-поле.

Не понял, почему "НО". Ведь как раз именно это и нужно было. Кроме того, ничего друго то и нет, если OnChange поля не подходит и нужно отловить момент до этого события.

Цитата:
Весь вопрос момент проверки EditingValue, даже OnValidate не поможет, если нажать на кнопку без фокуса.

Все равно будет вызвано OnValidate перед записью в поле. Или у вас есть сведения, что в каких-то случаях это событие не возникает (ну, кроме CancelOnExit)?

Остальные события редактора полезны в том случае, если нужно оставить курсор ввода в поле для более удобной работы пользователя.
Автор: TechnoDreamer
Дата сообщения: 25.04.2009 00:18

Цитата:
Установил Devexpress .42 на Д2009 и Д2007.
В Д2007 видны все скины а в Д2009 только "UserSkin".
Пробовал переустановить, переустановить и в другом порядке - результат один и тот же.
Никто не встречался с такими странностями?


У меня аналогичная проблема в D2007. Как побороть - не знаю...
Автор: Andrey128
Дата сообщения: 25.04.2009 10:26
Может у вас отключены скины в Components | Install Packages?
Автор: alexbozhko
Дата сообщения: 26.04.2009 09:35

Цитата:
А не подходит как вариант следующее:
в Lookup есть событие OnNew...
я у себя его обрабатываю, и если человек ввел
что-то новое - отсуствующее в списке, то я вывожу диалог
с вопросом - "Введенный элемент отсуствует в базе. Добавить?"
если да то вывожу если надо окно с указанием дополнительных
свойств этого элемента для заполнения пользователем,
потом refreshу данные Lookupа и и присваиваю ему полученный
идентификатор и все


Похоже, мы говорим немного о разных вещах.
http://www.sendspace.com/file/1h77y6
Вот небольшой пример, иллюстрирующий то, что я хочу.
В верхнем гриде имеется родное, не модифицированное поведение столбца cxGrid1DBTableView1LookUpField.
В нижнем - столбцу cxGridDBTableView1LookUpField присвоено Properties.
Собственно, вопрос состоит в том, что бы либо как-то получить доступ к выпадающему списку поля в верхнем гриде и прикрутить к нему кнопку. Либо правильно настроить PopupControl для поля в нижнем гриде. В частности, интересует как при выборе значения закрыть Popup правильно. Если в OnCellClick использовать cxGridDBTableView1LookUpField.Editing:=false;, то абсолютно не предсказуемо приложение валится.
Автор: SVBarmen
Дата сообщения: 26.04.2009 11:24
Возникла проблема, на форме есть компонент cxGrid который пробую распечатать через dxComponentPrinter, и всё вроде нормально, НО если в cxGrid в ячейке текст переносился по словах (в 2-3 строки), то dxComponentPrinter.Preview и при печати весь текст в ячейке рисуеться в одну строчку и конечно не влазить в ячеку по ширине.

Может кто знает как сохранить перенос по словах в ячейке при перати?
Автор: dc
Дата сообщения: 26.04.2009 22:58
Devexpress .42 и Ribbon и Д2009

Где(Как) устанавливаются шорт-каты для кнопки из тулбара?
Автор: jicoff
Дата сообщения: 27.04.2009 01:08
afiget

Могу и пример привести. У меня в проекте 2 грида - один мастер, другой детейл. Когда пробегаем по мастер гриду, обновляется детейл. А когда в детейле текущая запись находится в начале или в конце, то после нажатия клавиши вверх или вниз соответственно, мастер грид должен сменить текущую запись, что приведет к обновлению детейла. А если при этом пользователь изменил содержимое ячейки в детейле, то все просто пропадет, если не предусмотреть специальную обработку, т.к. не будет смены записи и OnValidate не сработает. Обработку VK_UP и VK_DOWN делаю сам, даже в текущем редакторе ячейки.
Автор: Meister Floh
Дата сообщения: 27.04.2009 08:19
dc
Исключительно все для риббона делается из бар-манагера..
Автор: deadbitch
Дата сообщения: 27.04.2009 10:22
Форумчане, есть такая интересная ситуация. Имеется грид с кол-вом левелов около 10, не все они видны и для прокрути появляются справа стрелочки. Сделан дополнительный элемент типа комбобокс, где можно выбрать нужный левел и он станет активным в гриде, НО.. он не становится видимым, как если бы я пролистал левелы с помощью стрелочек, т.е. его закладка так и остаётся невидима (если он был невидимым, где-то справа или слева). В остальном всё правильно работает.
Как заставить закладку левела появится в видимой области грида?
Автор: Meister Floh
Дата сообщения: 27.04.2009 10:41
deadbitch, а грид какой? cxGrid или какойнить трилист?
Автор: deadbitch
Дата сообщения: 27.04.2009 10:48
Meister Floh
cxGrid
Автор: Meister Floh
Дата сообщения: 27.04.2009 10:54
deadbitch
у меня аналогичная шняга с трилистом была, на больших кол-вах записей, пока не включил смартлоадинг.. А в схГрид не знаю, но по идее, должно быть, что-то аналогичное..
Автор: afiget
Дата сообщения: 27.04.2009 11:13
jicoff

Цитата:
У меня в проекте 2 грида - один мастер, другой детейл. Когда пробегаем по мастер гриду, обновляется детейл. А когда в детейле текущая запись находится в начале или в конце, то после нажатия клавиши вверх или вниз соответственно, мастер грид должен сменить текущую запись, что приведет к обновлению детейла. А если при этом пользователь изменил содержимое ячейки в детейле, то все просто пропадет, если не предусмотреть специальную обработку, т.к. не будет смены записи и OnValidate не сработает

Просто нужно выставить View.OptionsData.CancelOnExit:=false, насколько я понимаю.
Автор: deadbitch
Дата сообщения: 27.04.2009 12:08
Meister Floh

Цитата:
у меня аналогичная шняга с трилистом была, на больших кол-вах записей, пока не включил смартлоадинг.. А в схГрид не знаю, но по идее, должно быть, что-то аналогичное..


Почитал про него в справке - это не то. Проблема в том, что если сделаешь левел активным в рантайме, то он активируется , но его закладка не центрируется в видимой области грида
Автор: jicoff
Дата сообщения: 27.04.2009 12:13
afiget


Цитата:
Просто нужно выставить View.OptionsData.CancelOnExit:=false, насколько я понимаю.


Да там и Cancel'а никакого не будет, т.к. при смене текущей записи в мастер гриде, детейл DataSet просто закрывается.

deadbitch

Как вообще можно работать с таким количеством левелов? У нас уже 4 вызывало помутнение в глазах - количество горизонтальных и вертикальных прокруток превышало всякие допустимые для восприятия нормы. Очень часто не ту прокрутку нажимали при отладке, а пользователя вообще взвыли на эту картину.
Автор: deadbitch
Дата сообщения: 27.04.2009 12:21
jicoff

Цитата:
Как вообще можно работать с таким количеством левелов? У нас уже 4 вызывало помутнение в глазах - количество горизонтальных и вертикальных прокруток превышало всякие допустимые для восприятия нормы. Очень часто не ту прокрутку нажимали при отладке, а пользователя вообще взвыли на эту картину.


Да нормально вроде бы - если не работать с левелами вообще, а сделать какой-то свой навигатор для них. Навигатор сделан на основе комбобокса, но .. закладка выбранного левела не центрируется. Вот как это обойти? Мышкой-то если до него добираться он центрируется же.
Автор: Radio_Kat
Дата сообщения: 28.04.2009 12:48
Нужно сделать предпросмотр изображений наподобии того что в експлорере если задать вид "эскиз страниц" или в ACDSee.

Показалось что для этого нормально подойдет TcxGridCardView

Но ни как не могу понять как загрузить изображение в TcxGridCardView.

у TcxGridCardViewRow задала Properties = Image, а что дальше с ним делать совершенно непонятно

так:
cxGrid1CardView1.Items[0].EditValue
получаеться загрузить только строку или число. Пыталась присвоить переменную типа TImage или TJPEGImage => расказвает про несовпадение типа c Variant

Как сделать такой просмотр?
Не возникнет ли проблем с показом разных нестандартных форматов, например tif или png?
Автор: infomSB
Дата сообщения: 28.04.2009 14:00
Radio_Kat
Мое мнение что вы не тот компонент используете, даже если у вас все получится, добится достаточной красоты и функциональности от КардВью врятли получится, лучше использовать что-нибудь другое, специально для этого предназначенное или написать свой компонент.
Скажем что-то наподобие http://www.tmssoftware.com/site//thumblist.asp
Автор: jicoff
Дата сообщения: 28.04.2009 14:53
Radio_Kat
infomSB

У девок есть примеры использования кардвью с картинками. Для всех незарегистрированных типов изображений придется в bmp переводить. А поддержку png они только обещали сделать.

Добавлено:
Кстати, tms также не поддерживает tif и png.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

Предыдущая тема: Delphi: tcp клиент в потоке


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