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

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

Автор: marser
Дата сообщения: 26.07.2010 17:00
linker_2009

Цитата:
там спецально есть PopupEdit колонка для таких целей

Смотря для каких целей. Я имел введу Lookup колонку, а не ComboBox.
Автор: TechnoDreamer
Дата сообщения: 26.07.2010 22:17
linker_2009, marser спасибо. Думаю PopupEdit меня устроит.
Автор: TechnoDreamer
Дата сообщения: 28.07.2010 00:09
Есть таблица элементов, есть таблица категорий, и таблица отношений эелементов к категориям "многие ко многим". Нужен контрол в виде CheckListComboBox, где галочками выставляются категории для текущего элемента. С помощью чего это оптимально реализовать в девках? Посоветуйте пока я не начал изобретать велосипед...
Автор: BlackVetal
Дата сообщения: 28.07.2010 05:48
TechnoDreamer
Я бы попробовал сделать с помощью трех гридов : первый грид (хотя здесь не принципиально - можно использовать например ComboBox) - это список элементов, третий грид - список категорий. Второй грид - это таблица связи между элементом и гридом. При выборе элемента (первый грид) - во втором гриде отображается список соответствующих категорий. При двойном щелчке по категории (третий грид) она вноситься в список категорий текущего элемента (в таблицу связи). Ну а при двойном щелчке по записи во втором гриде - выкидывать категорию. Вместо реализации двойного клика - можно сделать кнопочки со стрелками - которыми можно будет перекидывать категории имежду вторым и третим гридом...
ну вообщем примерно такая схема.
Преимущество - достаточно наглядно. Недостаток - форма получается досточно большой, особенно если в таблицах много полей.
Автор: Czechoslovak
Дата сообщения: 28.07.2010 08:41
TechnoDreamer

Посмотри демку EditorsStylesDemo там есть пример использования cxDBCheckListBox, cxDBComboBox
Автор: Andryshok
Дата сообщения: 28.07.2010 12:38
Не знает ли кто в VCL билде 51 есть уже скины Office 2010 и риббон в том же стиле, ну в смысле как для Net
Автор: AvGSoft
Дата сообщения: 28.07.2010 12:58
Andryshok
http://devexpress.com/Support/WhatsNew/VCL/
Автор: TechnoDreamer
Дата сообщения: 28.07.2010 22:30
Czechoslovak, абсолютно не подходит. Там связь в одном поле хранится. И даже в пределах этого примера уже проблемы.

BlackVetal, так я уже делал, но в данном случае надо именно один комбик с чекбоксами.
Автор: BlackVetal
Дата сообщения: 29.07.2010 05:16
TechnoDreamer
Другой вариант - грид с колонкой из чекбоксов и в ручную обрабатывать эту колонку
Автор: HarrySmith
Дата сообщения: 30.07.2010 13:31
имею PivotGrid (хотя наверное и просто грид подойдет) в нем строки сгруппированы по след параметрам допустим Город-Клиент-ТорговаяТочка-Продавец в колонках есть названия товара а датой является количество проданного товара.
Очень Как то чтобы в каждой группе было количество элементов в предыдущей
Так например на торговой точке 3 продавца, у клиента 5 торговых точек, в городе 7 клиентов.
Можно ли это сделать что то заклинило
Автор: neznayka3
Дата сообщения: 02.08.2010 09:33
devexpress будет поддерживать vclx в delphi 2011? на оффсайте не нашел
Автор: X11
Дата сообщения: 03.08.2010 10:29
У меня cxVerticalGrid, в которой есть строка типа TcxButtonEdit с одной кнопкой. Пользователь вводит номер телефона и по мере ввода я должен программно проверять вводимые символы.
В TEdit у меня сделано так:

Код: procedure TfmAddPhone.edPhoneKeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9', #8]) then
begin
key := #0;
MessageBox(Application.ActiveFormHandle, 'В номере телефона допускаются только цифры.', 'Ошибка', MB_OK+MB_ICONERROR);
end;//if
end;
Автор: vladman
Дата сообщения: 03.08.2010 11:06
X11

Цитата:
Подскажите, на какое событие лучше повесить подобный код и что использовать вместо key?

На событие TcxCustomEditProperties.OnChange. И проверять значение TcxCustomEdit.Text (скорее даже его последнего символа) на ваше условие.
Но я бы не раздражал пользователя ненужными MessageBoxсами с ошибками, а вообще не давал бы вводить недопустимые символы посредством установки соответствующих значений в свойствах Properties.EditMask и Properties.MaskKind вашего TcxButtonEdit.
Автор: afiget
Дата сообщения: 03.08.2010 11:33

Цитата:
Но я бы не раздражал пользователя ненужными MessageBoxсами с ошибками, а вообще не давал бы вводить недопустимые символы посредством установки соответствующих значений в свойствах Properties.EditMask и Properties.MaskKind вашего TcxButtonEdit.

+1
А для "настойчивых" пользователей можно показать всплывающую подсказку с правилами ввода. Она не забирает на себя фокус и позволяет получить ответ на вопрос: что происходит и почему вводимые символы не отображаются.
Автор: X11
Дата сообщения: 03.08.2010 13:00
Кто-нибудь использует ini файл перевода?
Установил 51 версию. Там файл перевода какой-то не такой.
Автор: V1s1ter
Дата сообщения: 03.08.2010 21:26
Подскажите бестолковому.
C некоторых пор в пакетах Девок появились файлы *RS*.dpk, например есть cxBarEditItemD11.dpk и есть cxBarEditItemRS11.dpk.
Для какой цели они (*RS*.dpk) были созданы?
Автор: X11
Дата сообщения: 04.08.2010 14:19
Подскажите, как лучше и правильнее сделать?

Мне нужно узнать активный компонент. Это может быть cxGrid, DBGridEh или др. грид.
После того, как я узнаю, я выполняю импорт в датасет, привязанный к этому компоненту.

Проблема с cxGrid`ом.

Щёлкаю по строке грида, т.к. включено свойство ImmediateEditor, то я сразу попадаю как бы в редактор.
Поэтому

ShowMessage(ActiveControl.ClassName);
выдаёт мне TcxCustomInnerTextEdit

Теперь, собственно, вопрос! Как узнать, к какому cxGrid`у или к какому cxGridTableView относится этот самый cxCustomInnerTextEdit?

ShowMessage(ActiveControl.Parent.ClassName); выдаёт TcxMaskEdit

Если выполнить TcxCustomInnerTextEdit(ActiveControl).Hide;
то этот код
ShowMessage(ActiveControl.ClassName);
потом даёт AV, т.к. получается, что никакой компонент на форме не активен.

Добавлено:
Правильным ли будет такой код
ActiveControl.Parent.Parent.ClassName
или есть более гибкие и правильные решения?

Добавлено:
Пока что сделал так. Если есть решение получше, буду весьма благодарен.


Код: if ((ActiveControl is TDBGridEh) or (ActiveControl is TFibExTreeView) or (ActiveControl is TcxGridSite) or (ActiveControl is TcxCustomInnerTextEdit)) then
begin
if (ActiveControl is TDBGridEh) then
begin
if ImportSpr(TDBGridEh(ActiveControl).DataSource.DataSet) then ShowMessage('Готово');
TDBGridEh(ActiveControl).DataSource.DataSet.Open;
end;

if (ActiveControl is TcxCustomInnerTextEdit) then
begin
if ImportSpr(TcxGridDBTableView(TcxGridSite(ActiveControl.parent.parent).gridview).DataController.datasource.dataset) then ShowMessage('Готово');
TcxGridDBTableView(TcxGridSite(ActiveControl.parent.parent).gridview).DataController.datasource.dataset.Open;
end;

if (ActiveControl is TcxGridSite) then
begin
if ImportSpr(TcxGridDBTableView(TcxGridSite(ActiveControl).gridview).DataController.datasource.dataset) then ShowMessage('Готово');
TcxGridDBTableView(TcxGridSite(ActiveControl).gridview).DataController.datasource.dataset.Open;
end;


if (ActiveControl is TFibExTreeView) then
ImportTree( TFibExTreeView(ActiveControl) );
Автор: vladman
Дата сообщения: 04.08.2010 14:28
X11

Цитата:
Подскажите, как лучше и правильнее сделать?
Мне нужно узнать активный компонент. Проблема с cxGrid`ом.

Попробуйте так #
Автор: mdid
Дата сообщения: 04.08.2010 16:05
подскажите такую штуку..вопрос вроде и не сложный но возможно мелочи не вижу...или включилось вечернее торможение
в общем есть Ribbon..положил я на него cxBarEditItem c пропертсом ButtonEdit...когда я что то пишу в edit'е этого компонента а потом меняю фокус то все пропадает...соответственно что и cxBarEditItem.EditValue возвращает null...как побороть?
Автор: X11
Дата сообщения: 04.08.2010 16:54
vladman, спасибо.


Вопрос по раскраске грида. Разноцветный cxGrid.
Как мне указать цвет текста в конкретной колонке по определённым условиям?


Код:
procedure TfmArendaSearch.dbgArendaCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
inherited;

if ShowClientsInCalcField then
if not VarIsNull(AViewInfo.GridRecord.Values[dbgArendaMediator_ID_TYPE.Index]) then

ACanvas.Canvas.Font.Color := GetColorByTypeId(AViewInfo.GridRecord.Values[dbgArendaMediator_ID_TYPE.Index]);

ADone := true;
end;
Автор: yurikorz
Дата сообщения: 04.08.2010 16:59
Вроде бы надо
ADone := False;
Автор: salexn1
Дата сообщения: 04.08.2010 17:07
ADone - означает что ты все сам отрисовываешь, т.е. код DevExpress больше не нужен.
Автор: X11
Дата сообщения: 05.08.2010 10:52
yurikorz, salexn1, да, точно, спасибо.


Вопрос по cxGrid и по проблеме при добавлении новых колонок.
Ситуация такая.
Пользователь получает программу и работает с ней какое-то время. Программа сохраняет и восстанавливает настройки грида стандартными процедурами типа StoreToIniFile и RestoreFromIniFile.
Потом просит добавить какой-то функционал.
Программист добавляет, но при этом приходится в cxGrid добавить одну или несколько колонок, которые пользователь видеть не должен, а поэтому свойства Visible и VisibleForCustomization имеют значение False.
Пользователь запускает новую версию программы и видит, что в гриде видны какие-то непонятные ненужные служебные колонки. Хотя они видны не должны быть, ведь свойства "видимости" отключены.
Этот баг уже давно. Сейчас установлена версия 51.
Т.е. пока не удалишь ini-файл настроек таблицы, эти служебные колонки не исчезают. А удалять не хочется, т.к. пользователю потом нужно опять настраивать для себя грид.

Что посоветуете, а Великий и мудрый All?
Автор: BlackVetal
Дата сообщения: 05.08.2010 11:31
X11
Завести еще один файл с настройками - которык будут приоритетными перед пользовательскими, или прям где-то в программе указать в жесткую. А еще лучше - этот вопрос решать правами доступа (у меня в проекте и еолонки лочутся, и вкладки прячуться в зависемости от прав доступа)
Еще вариант - если при запуске программу нажать и удерживать кнопку (например, Shift) - то показывать слуебные колонки
Автор: salexn1
Дата сообщения: 05.08.2010 11:38
или написать свой загрузчик. как правило то нужны буквально 5 настроек...
Автор: X11
Дата сообщения: 05.08.2010 11:38
Скорее всего, что я погорячился, написав это сообщение. Наверное в последних версиях это исправили.


Цитата:
Еще вариант - если при запуске программу нажать и удерживать кнопку (например, Shift) - то показывать слуебные колонки

Тоже вариант. Подумаем
Автор: vladman
Дата сообщения: 05.08.2010 12:28
X11

Цитата:
Скорее всего, что я погорячился, написав это сообщение. Наверное в последних версиях это исправили.

Это не баг. Как вы могли заметить сохраняются характеристики колонок согласно их индексов. Если вы добавляете новую колонку не в конец, а между существующими, то, конечно, у вас при восстановлении будет бардак с настройками характеристик колонок. Как побороть? Как вариант, хранить версию приложения в том же ини файле, при старте приложения проверять сохраненную версию и актуальную версию приложения. Если они не равны, либо не восстанавливать характеристики измененного гриди из ини файла, либо запускать специальную процедуру корректировки сохраненных характеристик.
Автор: Chukotka
Дата сообщения: 05.08.2010 18:12
Есть TcxGrid, у него View. Задача сохранить и восстановить фильтр . Вопрос - как это сделать?

Вот так:
Код:
type
TcxFilterCriteriaAccess = class(TcxFilterCriteria);
...
TcxFilterCriteriaAccess(GridView.DataController.Filter).ReadData(Stream);
Автор: yurikorz
Дата сообщения: 05.08.2010 18:19
Сохранение:

Код: var
AFilterControl: TcxFilterControl;
AStream: TStream;
.....
AStream:=TMemoryStream.Create;
AFilterControl := TcxFilterControl.Create(Self);
AFilterControl.LinkComponent := GridDBTableView1;
AFilterControl.SaveToStream(AStream);
AFilterControl.Free;
Автор: Chukotka
Дата сообщения: 05.08.2010 18:57
yurikorz
Да, и я этот пример нашел на форуме DevExpress - тот же эффект. Независимо от состояния фильтра при сохранении создается файл размером 9 байт, и все.
Может, в настройках GridView что-то не установлено?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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