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

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

Автор: SIgor33
Дата сообщения: 06.05.2010 10:28
vladman

Цитата:
ADataController.FocusedRecordIndex := ARecordIndex;

Спасибо Вам
А не скажите как закрыть в этом обработчике открытый до этого детал. Чтобы было видно только у активного master
Автор: Andryshok
Дата сообщения: 07.05.2010 15:09
Вот http://devexpress.com/Products/NET/DXperience/WhatsNew2010v1/ ссылка для
Net со скинами Office 2010 . если у кого есть аккуант скачайте , может датите dll с 2010 шеурой мне для VCL ее перекомпилить надо, или напишите в ПМ
Автор: OwnerZ
Дата сообщения: 07.05.2010 15:11
Добрый день.

Подскажите как отловить в VerticalGrid`е раскрытие или закрытие узла если узел завязан на
CategoryRow

Мне надо это чтобы потом проверить что он делает открытие или закрытие (CategoryRow.Expanded = True ) но как отловить что он открывает ветку или закрывает я не могу понять.


Большое спасибо.

Автор: vladman
Дата сообщения: 09.05.2010 13:02
SIgor33

Цитата:
А не скажите как закрыть в этом обработчике открытый до этого детал. Чтобы было видно только у активного master

Чего ж не сказать. Попробуйте так:

Код: private
FGridAboutToBeExpanded: Boolean;
....
if FGridAboutToBeExpanded then Exit;
ADataController.CollapseDetails;
ADataController.FocusedRecordIndex := ARecordIndex;
try
FGridAboutToBeExpanded := True;
ADataController.ChangeDetailExpanding(ARecordIndex, True);
finally
FGridAboutToBeExpanded := False;
end;
Автор: unikum
Дата сообщения: 09.05.2010 14:21
Всех с праздником Победы!

Понимаю, что вопрос из серии Hellow World, но с базами очень мало работал.

Есть cxGrid который отображает некий SQL запрос. Несколько записей выделено (у cxGrid в опциях установлен MultiSelect). Через попменю через другой IBSQL назначаю некоторым полям значение, что в конечном итоге должно повлиять на внешний вид грида (если сортировка или группировка по этому полю).
Можно как то сделать штатными средствами, чтобы и выборку обновить и выделенные записи оставить выделенными ?
Автор: X11
Дата сообщения: 09.05.2010 21:59
Видимо баг в 48ой версии.
Вот что делаю. На форме есть dxBarManager. 3 панели, одна из них в режиме главного меню. На третей панели создал три элемента dxBarControlContainerItem


Прицепил к этим элементам 2 компоненты типа dxDateEdit и 1 cxCheckBox.

В главном меню создал пункт. В этот пункт перетянул из dxBarManager эти три элемента dxBarControlContainerItem.
Во время исполнения программы щёлкаю по этому пункту меню... выпадает. Верхний элемент начинает дёргатьтся влево-вправо и приложение как бы подвисает. Даже было так, что блокируется мыша. Снимок экрана сделать не получается. Вернее на снимке пункт меню закрытый, почему-то. Постараюсь сделать пример с проявлением бага.

Добавлено:
Создал пример, где это проявляется (D2007). Внутри также есть скомпилированный проект.
хттп://depositfiles.com/files/bzli0gyxo (744Кб)

Добавлено:
В 49 или 50 версии проявляется?? Может кто проверить? И ещё, может кто зарегистрирован у них, сообщите разработчика
Если вдруг это не баг, то что я делаю не так? Хотя...
Автор: vladman
Дата сообщения: 10.05.2010 10:16
unikum

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

Можно, сначала сохраните список всех выбранных записей, обновите выборку, а потом восстановите выбранные записи из сохраненного списка. Например:

Код: FList: TStringList;
.....
procedure SaveSelection;
var
i: Integer;
begin
if not Assigned(Flist) then
FList := TStringList.Create
else FList.Clear;
for i := 0 to <Your>cxGridDBTableView.Controller.SelectedRecordCount - 1 do
FList.Add(IntToStr(<Your>cxGridDBTableView.Controller.SelectedRecords[i].RecordIndex));
end;
....
procedure RestoreSelection;
var
i: Integer;
begin
for i := 0 to FList.Count - 1 do
with <Your>cxGridDBTableView.DataController do
ChangeRowSelection(GetRowIndexByRecordIndex(StrToInt(FList[i]), True), True);
end;
Автор: unikum
Дата сообщения: 10.05.2010 10:55

Цитата:
Можно, сначала сохраните список всех выбранных записей, обновите выборку, а потом восстановите выбранные записи из сохраненного списка.


Да, была мысль сделать нечто похожее, только в моем случае запоминать значения первичного ключа, но назвать такой способ "штатным" как то язык не поворачивается
Автор: vladman
Дата сообщения: 10.05.2010 11:38
unikum

Цитата:
но назвать такой способ "штатным" как то язык не поворачивается

У каждого, в общем случае, свое понимание штатности. Эта статья из новледж бэйз также может быть вам полезна...

Добавлено:
X11

Цитата:
хттп://spam_detected/files/bzli0gyxo

Что-то файл недоступен, или не получилось разгадать ваш ребус.
Автор: X11
Дата сообщения: 10.05.2010 12:24
Файл доступен, просто замените spam_detected на depositfiles

h__p://d e p o s i t f i l e s . c o m /files/bzli0gyxo
пробелы уберите
Автор: vladman
Дата сообщения: 10.05.2010 14:21
X11

Цитата:
Файл доступен, просто замените spam_detected на depositfiles


Цитата:
Если вдруг это не баг, то что я делаю не так?

Это не баг. Это, так сказать, "intended behavior" ExpressBars.
ms-help://borland.bds5/ExpressBars6.BDS5/ExpressBars6/IDH_Class_TdxBarControlContainerItem.htm

Цитата:
Important Note: Only basic controls are eligible to be put into submenus or Ribbon controls. In other words, those controls should not have window handles.
Only one instance of an external control should be visible when running an application, therefore set the Visible property of the external control to False in order to provide faultless functionality.

А в чем необходимость использования dxBarControlContainerItem для помещения dxDateEdit и cxCheckBox на ToolBar? В таком случае я бы воспользовался в качестве элементов меню компонентами типа TcxBarEditItem.
ms-help://borland.bds5/ExpressBars6.BDS5/ExpressBars6/IDH_Class_TcxBarEditItem.htm
ms-help://borland.bds5/ExpressBars6.BDS5/ExpressBars6/IDH_CD_Inplace_Editors.htm
ms-help://borland.bds5/ExpressBars6.BDS5/ExpressBars6/IDH_CD_List_of_Bar_Item_Types.htm
Автор: X11
Дата сообщения: 10.05.2010 15:23

Цитата:
А в чем необходимость использования dxBarControlContainerItem для помещения dxDateEdit и cxCheckBox на ToolBar?

А почему бы нет? Помниться мне, что Вы советовали наоборот использовать dxBarControlContainerItem + стандартные элементы, в то время, когда я использовал TcxBarEditItem.

Добавлено:
И ещё. Согласно справке, все элементы, помещаемые на dxBarControlContainerItem, должны иметь значение False в свойстве Visible. Так вот. Использую cxCheckBox и cxDateEdit.
cxDateEdit во время исполнения видно, а cxCheckBox не видно. Приходится у cxCheckBox свойство visible ставить в True. Тоже мне кажется это не совсем корректным.
Автор: afiget
Дата сообщения: 10.05.2010 15:37

Цитата:
А в чем необходимость использования dxBarControlContainerItem для помещения dxDateEdit и cxCheckBox на ToolBar? В таком случае я бы воспользовался в качестве элементов меню компонентами типа TcxBarEditItem.

Возможностей у них меньше и поведение отличается от стандартных компонентов.
Автор: vladman
Дата сообщения: 11.05.2010 00:50
X11

Цитата:
Помниться мне, что Вы советовали наоборот использовать dxBarControlContainerItem + стандартные элементы, в то время, когда я использовал TcxBarEditItem.

Навряд ли. Вы наверное меня с кем-то перепутали, и, скорее всего, с afiget.
Насколько я помню, был один случай когда я советовал использовать dxBarControlContainerItem. Это касалось помещения в меню TcxMemo. Но потом, вроде как, остановились на использовании TcxBarEditItem PopupEdit.

Цитата:
И ещё. Согласно справке, все элементы, помещаемые на dxBarControlContainerItem, должны иметь значение False в свойстве Visible.

В вашем случае более важной и определяющей является первая часть примечания из справки - "Только базовые контролы допустимы для помещения в подменю ... . Иными словами такие контролы не должны иметь window handles". Если это указано в справке, то, наверное, не просто так.
X11
afiget

Цитата:
А почему бы нет?


Цитата:
Возможностей у них меньше и поведение отличается от стандартных компонентов.

Каждому, конечно, самому решать что да, а что нет. Я всего лишь попытался поделиться своим humble opinion, правда, подтвержденным двумя статьями из небезызвестного источника ).
1. TdxBarControlContainerItem - Makes it possible to use a control which has window handle in a submenu
2. TdxBarControlContainerItem - Easy focusing
X11 - вам обязательно нужно ознакомиться со второй, раз уж вы решили использовать TdxBarControlContainerItem в качестве SubMenu, обратив внимание на "Workaround: How to Programmatically Set Focus to an ControlContainerItem".
Автор: X11
Дата сообщения: 11.05.2010 09:46

Цитата:
X11 - вам обязательно нужно ознакомиться со второй, раз уж вы решили использовать TdxBarControlContainerItem в качестве SubMenu

Я не использую TdxBarControlContainerItem в качестве SubMenu, я в сам пункт меню вставляю TdxBarControlContainerItem. Или это Вы и имели ввиду?

За ссылки огромное спасибо.
Автор: vladman
Дата сообщения: 11.05.2010 10:14
X11

Цитата:
Или это Вы и имели ввиду?

Да, именно это имел ввиду.
Автор: mdid
Дата сообщения: 11.05.2010 10:31
объясните плз мне такую штуку..а то уже пипец
есть GridTableView1 хочу его разукрасить в связи с нуждами(через CustomDrawCell)
для примера ввел рандомные данные где четное поле имеет значение 1..нечетное 0
в этом обработчике пишу

Код:
if GridTableView1.DataController.Values[AViewInfo.RecordViewInfo.Index, Tp.Index]=0 then
ACanvas.Brush.Color:=$008080FF
else
ACanvas.Brush.Color:=$0068E005;
Автор: X11
Дата сообщения: 11.05.2010 11:07
Лучше использовать событие OnGetConextStyle
Автор: mdid
Дата сообщения: 11.05.2010 11:19
та уже жизнь наладилась заменил

Код:
GridTableView1.DataController.Values[AViewInfo.RecordViewInfo.Index, Tp.Index]
Автор: SIgor33
Дата сообщения: 11.05.2010 14:32
чтобы с позиционировать и выбрать запись при щелчке на кнопки когда открываю детал использую вот этот обработчик
procedure TFormDataVvod.TvDataDataControllerDetailExpanded(
ADataController: TcxCustomDataController; ARecordIndex: Integer);
begin
if ADataController.FocusedRecordIndex<>ARecordIndex then
begin
ADataController.ClearSelection;
ADataController.CollapseDetails;
ADataController.FocusedRecordIndex := ARecordIndex;
ADataController.ChangeDetailExpanding(ARecordIndex,True);
ADataController.ChangeRowSelection(ARecordIndex,True);
end;
end;
а когда выбираю просто запись хочу чтобы закрылся детал у ранее открытой другой записи для этого использую обработчик SelectionChanged в котором закрываю все деталы. Проблема в том что при вставке новой записи вылизает ошибка RecordIndex вышел за пределы и второе из то что в обработчике DetailExpanded есть строка ADataController.ChangeRowSelection(ARecordIndex,True); то закрытие происходит таже при нажатие на Expanded Button поэтому приходиться два раза кликать на ней чтобы открыть. Посоветуйте как обойти это, может обработчик другой какой нужен?
Автор: brookson
Дата сообщения: 11.05.2010 15:14
Всем привет! Ищу такую вот возможность у cxGird-a.
Есть группировка по первому столбцу. Надо, чтоб для одной из групп выводились дополнительные DefaultGroupSummaryItems (по некоторых столбцах).
То есть для всех групп суммируем 4 столбец, а в одной из групп надо еще суммировать и 2, 3, 5 и 6 столбец.

Возможно ли такое? Пытаюсь вникнуть в раздел справки "Obtain And Set Summary Values", но не совсем понимаю, о чём там идёт речь.
Может поможет кто?
Автор: Zaragossa
Дата сообщения: 11.05.2010 15:51
Всем привет! Недавно начал пользоваться девом. Так что не судите строго. У меня вопрос" Как в Гриде поставить фокус на нужную мне ячейку(например ячейка(3,2) ) в режим редактирования? Заранее спасибо.
Автор: Cryogen2003
Дата сообщения: 11.05.2010 15:57
Zaragossa
FrecordIndex - индекс записи
Acolumn - столбец грида

Если фокус, то я делаю так:
AGrid.DataController.FocusedRecordIndex := FRecordIndex;
AGrid.Controller.FocusedColumnIndex := AColumn.VisibleIndex;

Если надо выделить (selected) сделать, то тогда так:
AGrid.Controller.ClearSelection;
ARowIndex :=
AGrid.DataController.GetRowIndexByRecordIndex(FRecordIndex, True);
AGrid.Controller.SelectCells(AColumn, AColumn, ARowIndex, ARowIndex);
Автор: Zaragossa
Дата сообщения: 11.05.2010 16:16

Цитата:
Cryogen2003


Большое тебе спасибо, по началу не мог понять почему оно выделяет ячейку но при нажатие ентера не ставит в режим ввода, а как поставил Grid1.Setfocus() в начале все заработало!
Еще раз спасибо!
Автор: tanaseduard
Дата сообщения: 11.05.2010 17:14
Как зделать чтоб текст в заголовках (cxGrid,PivotGrid) был вертикальным а не горизонтальным.
Уж больно много места занимает.
Автор: xokc
Дата сообщения: 11.05.2010 19:24
tanaseduard
Для начала так:
hxxp://devexpress.com/Support/Center/p/Q257053.aspx
hxxp://devexpress.com/Support/Center/p/Q180484.aspx
hxxp://devexpress.com/Support/Center/p/Q241794.aspx
Автор: vladman
Дата сообщения: 12.05.2010 02:14
SIgor33

Цитата:
Посоветуйте как обойти это, может обработчик другой какой нужен?

Лучше, на мой взгляд, в вашей ситуации использовать обработчик onFocusedRecordChanged.
Следующий код должен решить обе ваши проблемы:

Код: procedure <Your>TForm.<Your>cxGridDBTableViewDataControllerDetailExpanded(ADataController: TcxCustomDataController;
ARecordIndex: Integer);
begin
ADataController.CollapseDetails;
ADataController.FocusedRecordIndex := ARecordIndex;
ADataController.CheckFocusedSelected;
try
<Your>cxGridDBTableView.DataController.OnDetailExpanded := nil;
ADataController.ChangeDetailExpanding(ARecordIndex, True);
finally
<Your>cxGridDBTableView.DataController.OnDetailExpanded := <Your>cxGridDBTableViewDataControllerDetailExpanded;
end;
end;

procedure <Your>TForm.<Your>cxGridDBTableViewFocusedRecordChanged(Sender:
TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord:
TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean);
begin
if not (TcxDBDataController(Sender.DataController).DataSet.State in [dsInsert]) then
Sender.DataController.CollapseDetails;
end;

procedure <Your>TForm.<Your>DataSetBeforeInsert(DataSet: TDataSet);
begin
<Your>cxGridDBTableView.DataController.CollapseDetails;
end;
Автор: Man_Without_Face
Дата сообщения: 12.05.2010 08:28
Раньше в другой ветке задавал вопрос:

Цитата:
Может кто подскажет почему в Dll при рантайме не поддерживаются скины (DevExpress v48), в дезайн выставляю и все отлично меняется? В exe и там и там нормально.

На что получил ответ:

Цитата:
Нормальная работа VCL в dll без использования пакетов не гарантируется, об этом написано в справке. Обычно это приводит к возникновению самых странных и непредсказуемых глюков. Собственно поэтому вас тут так агитировали использовать пакеты. Но раз у вас разные версии делфи, и это не возможно, то остается только минимизировать использование VCL в библиотеке.

В шапке этой ветки есть ссылка на DLL со скинами, я ее скачал. Вопрос: можно ли как нибудь к моей DLL "приклеить" эту, чтобы у меня была поддержка скинов?
Автор: Zaragossa
Дата сообщения: 12.05.2010 08:43
Всем доброе утро!
В работе с DevExpress мне было необходимо использовать cxGrid примерно так же как Stringgrid.
Поделюсь своими наработками в этом деле:
1.Используем не DBtable а просто Table
2.Создаем колонки
3. Для добавления строки я использую - Table1.DataController.recordcount:= i (кол-во строк), их можно увеличивать по ходу выполнения цикла или другой операции
(например i+1) ;
4. Для Записи в ячейку использую Table1.DataController.setvalue(строка,колонка,значение)
5.А если надо выбрать значение из ячейки использую Table1.DataController.getvalue(строка,колонка)
6. Table1.DataController.RecordCount - кол-во строк
7. Если хотим видеть сумму по колонке использую Footer, включить его можно в параметрах Table - OptionsView- Footer - true.
Автор: SIgor33
Дата сообщения: 12.05.2010 10:07
vladman

Цитата:
Следующий код должен решить обе ваши проблемы:

Спасибо все заработало.

Возник еще вопрос
У меня в одной из колонок cxGridDBTableView используется в качестве элемента редактирования LookupComboBox на нем висит справочник у которого два поля ID (идентификатор тип integer) и Name (текстовое значение) это поле является listsource а id ключевым которое пишется в базу. Хотелось находясь на текущей записи без использования sql запроса по Id получить текстовое значение словаря данной записи.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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