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

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

Автор: NuclearDeath1
Дата сообщения: 16.11.2007 15:34
Dronton2
TableView.OptionsView.HeaderHeight работает только в том случае, если все столбцы имеют стандартный размер (Column.Position.LineCount = 1)

Если же хотя бы один столбец имеет Column.Position.LineCount > 1, то TableView.OptionsView.HeaderHeight перестает действовать - все столбцы, кроме изменяемого, принимают стандартную высоту, изменяемый же столбец принимает высоту Column.Position.LineCount * (стандартная высота).

TableView.OnGetCellHeight - опять же, вызывается только в случае, если столбцы имеют стандартный (Column.Position.LineCount = 1) размер.

Продолжаю искать решение =) ...
Автор: NuclearDeath1
Дата сообщения: 18.11.2007 13:38
Половинчатое решение найдено.

Устанавливаем Column.Position.LineCount = 1, и меняем высоту заголовков всех колонок разом с помощью TableView.OptionsView.HeaderHeight.

Хотелось сделать таблицу с разной высотой заголовков столбцов (т.е., например, высота заголовка столбца Col1 равна 7 усл. ед., а высота заголовка столбца Col2 равна 10 усл. ед.), чтобы при этом все ячейки имели стандартную высоту - но ИМХО это пока что невозможно.

Спасибо всем откликнувшимся
Автор: korobovmax
Дата сообщения: 18.11.2007 13:51
NuclearDeath1, я написал:

Цитата:

Событие <GridDBTableView>+<ИмяСтолбца>.OnCustomDrawHeader - прямо в нем руками с помощью местного Canvas'а рисовать заголовок столбца. Примеры рисования есть в Demos'ах стандартной поставки


Нужно-то всего:
1. Сэмулировать рисование столбцов (так как себе надо);
2. Рисование треугольника сортировки;
3. Вывод текста (заголовка столбца).

И гордо устанавливать ADone в True
Автор: DroN_S
Дата сообщения: 18.11.2007 22:28
как в cxGrid'е использовать контекстный поиск?
Автор: afiget
Дата сообщения: 19.11.2007 01:23
DroN_S
SomeView.OPtionsBehavior.IncSearch = true
SomeColumn.Options.IncSearch = true

Разрешает поиск по колонке, когда курсор находится в ячейке этой колонки.
Автор: DroN_S
Дата сообщения: 19.11.2007 04:16
afiget
пардон, не в cxGrid'е, а в dxDBGrid'е осуществить контекстный поиск?
Автор: NuclearDeath1
Дата сообщения: 19.11.2007 12:12
korobovmax

Я подумал и понял, что вы предложили правильное решения )

Просто я уперся и хотел найти какое-то стандартное решение, без обработки событий и добавления функционала, по-простому решить вопрос )

Спасибо за ответы.
Автор: afiget
Дата сообщения: 19.11.2007 13:48
DroN_S
С этим не помогу, давно обновился.
Автор: aQG
Дата сообщения: 19.11.2007 14:49
Здравствуйте. Помогите пожалуйста с проблемой.
Использую Quantum Grid v.6.
Работаю следующим образом:
Delphi. Компоненты TQuery, TDataSource, TAdoConnection.
Выполняю запрос (запросы самые разнообразные). Резултат отображаю в гриде:
cxGrid1DBTableView1.DataController.CreateAllItems(false);
Таким образом, в режиме дизайна ничего не проектирую.
Стоит следующая задача.
Большинство запросов типовые и возвратят примерно следующее:
[Идентификатор], [Количество], [Цена]. Остальные поля не столь выжны.
Нужно группировать данные. Переношу в верхнюю часть грида столбец [Идентификатор] и получаю все почти в том виде, как это и требуется.
Теперь хочется рядом с наименованием идентификатора видеть общее количество и общую цену для группы. Как это сделать?
В хелпе нашел пример. Но это только для того случая, когда в режиме дизайна создаются поля (Table View Tutorial. Step 8: Group Summary Creation), т.е. нам уже известно, какие поля будут во View. Как такое сделать в рантайме?

Автор: DroN_S
Дата сообщения: 19.11.2007 16:10
afiget
оказалось очень банально, надо было выставить свойство edgoAutoSearch в true и всё
вот следующий вопрос: как загрузить картинку в dxDBGrid...
я делаю сейчас так: создал поле типа GraphicColumn, сделала его первым по счёт (IndexCol=0) и на событие OnCustomDrawCell повешал такой код

Код:
if (AColumn = OrgList.Columns[0]) and
(dm.IView.FieldByName('EXT').AsInteger = 0) then
begin
OrgList.Canvas.Draw(ARect.TopLeft.x, ARect.TopLeft.y, frmView.Excel);
OrgList.Cursor := crHandPoint;
end;
Автор: X11
Дата сообщения: 19.11.2007 18:23
Доброе время суток.
А можно в гриде вызвать программным путем окно фильтра на определенное поле? Если да, то подскажите как.
Автор: golkanavt
Дата сообщения: 20.11.2007 11:08

Цитата:
А можно в гриде вызвать программным путем окно фильтра на определенное поле? Если да, то подскажите как.

Пример программного добавления фильтра по текстовому полю. Текст для фильтрации задается в переменной FilterDisplayText:

Код:
var
FilterDisplayText, FilterText: string;
AItem: TcxCustomGridTableItem;
AItemList: TcxFilterCriteriaItemList;
...
with YourTableView do
begin
AItem := Items[GetColumnByFieldName(YOURFIELDNAME).Index];
FilterText := '%' + FilterDisplayText + '%';
try
DataController.Filter.BeginUpdate;
AItemList := DataController.Filter.Root.AddItemList(fboOr);
AItemList.AddItem(AItem, foLike, FilterText, FilterDisplayText);

AItem := Items[GetColumnByFieldName(YOURFIELDNAME).Index];
FilterText := '%' + FilterDisplayText + '%';
AItemList.AddItem(AItem, foLike, FilterText, FilterDisplayText);
finally
DataController.Filter.Active := true;
DataController.Filter.EndUpdate;
end;
end;
Автор: Dronton2
Дата сообщения: 20.11.2007 14:25
golkanavt
X11
как я понимаю, нужно было
Цитата:
вызвать программным путем окно фильтра на определенное поле
? т.е. выпадающий список в заголовке окна?
Автор: X11
Дата сообщения: 20.11.2007 16:14
хорошо, а как окно фильтра вызвать?
Автор: uazero
Дата сообщения: 20.11.2007 16:26
Появилась неприятная "фича" для моих бухгалтеров после установки версии х.28, до этого работал на апрельской версии.
Ситуация такая:
На форме лежит TcxPageControl с одним TcxTabSheet
На TcxTabSheet лежат TcxVerticalGrid и две кнопки TcxButton

Пользователь вводит текстовые данные в TcxVerticalGrid, при нажатии на кнопку TcxButton выполняются действия. Раньше при нажатии на кнопку все действия выполнялись сразу, а с версией х.28 ситуация иная - нужно нажать два раза на кнопку. Т.е. получается, что при первом нажатии на кнопку (т.е. потеря TcxVerticalGrid'ом фокуса) ячейка в TcxVerticalGrid выходит из режима редактирования и фокус всё равно остаётся на TcxVerticalGrid.

А теперь вопрос: как побороть это поведение, и сделать так как было в апрельской версии, т.е при потере фокуса TcxVerticalGrid'ом ячейка принимала сделанные изменения (immediate post)
Автор: infomSB
Дата сообщения: 21.11.2007 11:21
aQG
Поищите вот тут
GridClaimantsTV.DataController.Summary.GroupSummaryItems
Необходимо просто добавить нужные вам элементы.

Добавлено:
X11
Кстати в папке с QuantumGrid есть прекрасные демки с работой с фильтром
Также вам можно использовать компонент cxFilterControl и в качестве LinkComponent указать нужный вам грид.
Автор: aQG
Дата сообщения: 21.11.2007 11:36

Цитата:
Поищите вот тут
GridClaimantsTV.DataController.Summary.GroupSummaryItems
Необходимо просто добавить нужные вам элементы.


Ну, до этого дошел) Что делаю: захожу в режиме дизайна в редактор (кликаю на cxGrid1DBTableView1), перехожу в раздел Summary->Default fo groups. Здесь создаю Item: TcxGridDBTableSummaryItem. В рантайме, как я понимаю, для доступа к нему нужно сделать так: cxGrid1DBTableView1.DataController.Summary.GroupSummaryItems[0].Items[0].
В том же редакторе ставлю для этого итема:
Format: Сумма
Kind: skSum
Теперь пытаюсь использовать событие cxGrid1DBTableView1CustomDrawGroupCell.
Что здесь-то нужно делать? Как работать с полями.
Если не затруднит, дайте пожалуйста небольшой пример.

Нашел в хелпе следующее:

Код:
//The second summary group
with SummaryGroups.Add do
begin
//Add proposed grouping column(s)
TcxGridTableSummaryGroupItemLink(Links.Add).Column := tvOrdersProductID;
//Add summary items
with SummaryItems.Add as TcxGridDBTableSummaryItem do
begin
Column := tvOrdersQuantity;
Kind := skSum;
Position := spFooter;
Format := 'TOTAL = 0';
end;
with SummaryItems.Add as TcxGridDBTableSummaryItem do
begin
Column := tvOrdersPurchaseDate;
Kind := skMin;
Position := spFooter;
end;
end;
...
Автор: Dronton2
Дата сообщения: 22.11.2007 08:49
uazero
В обменнике (см.шапку) лежит версия х.29. Там это исправлено?
Автор: uazero
Дата сообщения: 22.11.2007 14:14
Dronton2, в версии х.29 поведение такое же. Сначала нужно выйти из режима редактирования ячейки.
Автор: George_Lucky
Дата сообщения: 23.11.2007 09:37
Dronton2
uazero
28-ая версия работала корректно.
а в 29-ой верт.грид с кнопкой плохо работает (мож кнопка не срабатыват)
и еще в 29 нет скинов

похоже придется вертаться на 28-ую
Автор: golkanavt
Дата сообщения: 23.11.2007 15:04
Кстати, читая об изменениях в поведении грида со сменой версии вспомнил о своей проблеме - на форме лежит TabSheet с кучей табов, практически на каждом из них есть тулбары с хоткеями, наиболее актуальный из них - добавление записей по Insert. Работало все замечательно, в зависимости от активного sheet срабатывал нужный Action по этому хоткею. Несколько месяцев назад это точно работало, когда я как разработчик приложения принимал участие в работе отдела и сам вносил данные. Затрудняюсь сказать, на какой версии механизм сломался, и теперь вне зависимости от активной вкладки срабатывает Action самой первой, что не есть гуд, особенно теперь, когда операторы приложения научились работать с хоткеями и для ускорения обработки информации хотят делать все с клавиатуры. Сталкивался ли кто либо с этой проблемой и как ее решать?

Добавлено:
Текущая версия Dev - DevExpr_11_sep_2007
Автор: korobovmax
Дата сообщения: 23.11.2007 16:04
golkanavt, можно сделать один Action с желаемым хоткеем.
В нем сделать обработку:
case TabSheet.ActivePageIndex of
0: <ActionInsert0>.Execute;
...
N: <ActionInsertN>.Execute;
end;

Самый просто механизм
Автор: golkanavt
Дата сообщения: 24.11.2007 16:43
korobovmax
Сделать то можно, только мне непонятно, почему такие изменения в поведении компонент, чем это оправдано? Этак при каждом апдейте девок придется весь новый билд софта перелопачивать на предмет подобных "усовершенствований", ведь работало все нормально и тут нате.
Автор: korobovmax
Дата сообщения: 24.11.2007 19:56
golkanavt, я не знаю, какой у тебя обработчик стоит.
Мое решение - независимо от версий
Автор: ivyanushkevich
Дата сообщения: 25.11.2007 16:57
Есть такая проблема.

Начальные условия:
1. Грид работает в unbound mode (заполняю ручками).
2. Сортировки отключены.
3. В грид залито примерно 60 000 строк.

Что делает пользователь:
1. использует popup фильтры, группировки
2. меняет значение одного поля с 1 на 0 и наоборот.

Какие возникают проблемы:
1. Если не использовать фильтры и группировки, то изменение значения поля происходит моментально. если же стоит фильтр, то изменение одного значения занимает до 3 сек. - это дофига.
Как я понял, грид в это время занимается перестройкой фильтров и сортировкой. Зачем - непонятно, т.к. ни в сортируемых, ни в отфильтрованых колонках ничего не поменялось.
2. Грид каждый раз при открытии попап фильтра заново его считывает - занимает секунды три. Опять же непонятно зачем - никаких изменений в фильтруемые поля не вносилось.

Код изменения одного значения:

Sender.DataController.BeginUpdate;
Sender.DataController.Filter.BeginUpdate;
try
s := '';
t1 := time;
if (ACellViewInfo.Item.Tag >0) and (ACellViewInfo.DisplayValue <> null) then begin
rl := TRightsLine(Integer(RightsGrid.DataController.Values[RightsGrid.DataController.FocusedRecordIndex,0]));
Right := rl.ObjectType.RightsById[ACellViewInfo.Item.Tag];
if Right.Value = 0 then
Right.Value := 1
else
Right.Value := 0;
end;
finally
RightsGrid.DataController.Filter.CancelUpdate;
RightsGrid.DataController.EndUpdate; // !!! вот эта операция занимает 3 секунды, все остальное проходит мгновенно
end;


Вопросы:

1. Как можно отключить постоянное построение фильтров?
2. Как при изменении значения обойти задержку на EndUpdate?
Автор: Dronton2
Дата сообщения: 26.11.2007 09:18
ivyanushkevich
Не уверен, что получится, но можно попробовать TcxCustomDataController.BeginUpdateFields
либо для фильтруемых полей, либо для обновляемых вместо DataController.BeginUpdate.
Не уверен я в итоговом результате, т.к. непонятно, что делает датаконтроллер при получении нотификации об изменении значения поля.
Автор: brookson
Дата сообщения: 26.11.2007 10:27
всем привет.

в обычном лукапном дб комбо можно было указать List Sourse, List field и Lisk key field, не указывая DataSouse, Datafield.
и тогда в нём можно было просто отобразить выбранное значение.
скажите, как настроить (не сомневаюсь, что можно) cxDbLookupComboBox, чтоб тоже показывал значение Listfield.
пока не получается
Автор: Dronton2
Дата сообщения: 26.11.2007 10:46
brookson
Используй OnGetDisplayText.
Но, если используешь cxDbLookupComboBox, то лучше указывать DataSource, иначе нет смысла его использовать.
Автор: X11
Дата сообщения: 26.11.2007 11:58

Цитата:
всем привет.

в обычном лукапном дб комбо можно было указать List Sourse, List field и Lisk key field, не указывая DataSouse, Datafield.
и тогда в нём можно было просто отобразить выбранное значение.
скажите, как настроить (не сомневаюсь, что можно) cxDbLookupComboBox, чтоб тоже показывал значение Listfield.
пока не получается


Тоже БЫЛА такая проблема, пока не подсказали здесь же, что в обычном (НЕ DB) выпадающем списке cxLookupComboBox тоже есть listsource и всё остальное
Автор: brookson
Дата сообщения: 26.11.2007 15:24
<b>Dronton2</b>

получилось с cxLookupComboBox! забыл, что есть такое чудо. и там всё, как я хотел.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

Предыдущая тема: Язык программирования на русском языке


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