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

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

Автор: GuSoft2007
Дата сообщения: 27.08.2014 00:55
а можно тут "косвенно связанный" с компонентами вопрос задать? незнаю просто уже куда ткнуться. asp net aspxgridview?
Автор: Dukekz
Дата сообщения: 27.08.2014 08:28
Господа. Не пользовал дельфи/билдер с 6й версии. Тут возникла необходимость реанимировать древний проектик на новый лад на XE5. В проекте используются девэкспрессы. Нашел 13.1.4 и 13.2.5, скачал, поставил. Нифига не понимаю как хелпы от них прикрутить в среду?
По следам того что было в папке Setup исходников накопал лог H2Reg_Log.txt, пытаюсь зарегать хелпы, как там указано. Например так:
h2reg.exe -r -a CmdFile=C:\RADStudio\DevExpress\ExpressQuantumGrid\Help\ExpressQuantumGrid.ini
В логе грабли какие-то появляются, с наименованиями.
В рабочем (как я подозреваю) логе, вот такие наименования:
[Reg_Namespace]
ExpressCrossPlatformLibrary.rs_xe2|ExpressCrossPlatformLibrary.HxC|
[Reg_Title]
ExpressCrossPlatformLibrary.rs_xe2|ExpressCrossPlatformLibrary|1033|ExpressCrossPlatformLibrary.HxS|ExpressCrossPlatformLibrary.HxS||||||
...

У меня же в логе:
[Reg_Namespace]
ExpressCrossPlatformLibrary.%IDE_Namespace_Postfix%|ExpressCrossPlatformLibrary.HxC|
[Reg_Title]
ExpressCrossPlatformLibrary.%IDE_Namespace_Postfix%|ExpressCrossPlatformLibrary|1033|ExpressCrossPlatformLibrary.HxS|ExpressCrossPlatformLibrary.HxS||||||
...

Тобишь %IDE_Namespace_Postfix% должны быть заменены на rs_XE5? Как этому H2Reg.exe правильно сказать, что %IDE_Namespace_Postfix% = rs_XE5 для меня?

Автор: AlexCoRu
Дата сообщения: 31.08.2014 14:18
TcxDBTreeList with one or more sorted columns incorrectly sorts contents after a node's data has been posted by clicking another node
ID: T141486
Created On: 19.08.2014 9:03:19
Modified On: 27.08.2014 12:48:39
Build: v2014 vol 1.3 / 6-Aug-2014
Download hotfix
Хотфикс также устраняет проблемы с кнопкой append навигатора.
Автор: Chukotka
Дата сообщения: 03.09.2014 10:22
Есть у кого пример вертикальной отрисовки заголовка столбца для cxGrid?
Автор: dimm78
Дата сообщения: 03.09.2014 15:25

Цитата:
Chukotka

_https://www.devexpress.com/Support/Center/Question/Details/A500
Автор: VadimLou
Дата сообщения: 10.09.2014 08:34
AlexCoRu
Перевыложи хотфикс плиз
Автор: SuPriTo
Дата сообщения: 10.09.2014 09:51

Цитата:
Перевыложи хотфикс плиз

Хотфикс тут
Автор: Dukekz
Дата сообщения: 10.09.2014 14:30
В старом проекте (CBuilder 6), который пытаюсь реанимировать на XE5, есть код, который перестал работать при переезде на новые DevExpress и UniDac.
В частности не могу понять как обойти следующее. На форме компонент TdxDBTreeView, который присоединен к датасету TUniQuery. Отображает записи в виде иерархического дерева. У пользователя есть возможность таскать ветви в дереве драг-н-дропом. При перетаскивании есть необходимость обновлять данные в этих перетаскиваемых записях.
Раньше в событии OnDBAction дерева работало так:

if (Action == trDBChangeParent)
{
TreeView->DisableAlign();
TreeView->Items->BeginUpdate();
try
{
SetBranchData(KeyFieldValue, OldData, NewData);
}
__finally
{
TreeView->DataSource->DataSet->Refresh();
TreeView->Items->EndUpdate();
TreeView->EnableAlign();
}
}

В XE5 с девками версии 13.2.5 по выходу из этой функции получаю такой эксепшн:
Project test.exe raised exception class $C00000005 with message 'access violation at 0x0059d934: read of address 0xefefefeb'

Функция SetBranchData() обновляет данные в перемещаемых записях с помощью SQL (содержимое ключевых полей KeyField ParentField не затрагиваются), я не могу их обновить непосредственно в связанном с TreeView датасете (TUniQuery). После обновления мне необходимо как то обновить дерево, чтобы отображающиеся данные в нем обновились. Но все попытки Refresh вызывают AccessViolation. Исследования в дебаге показали что эксепшн вываливается на строке 15525 (вызов метода Destroy) в System.pas:
procedure TObject.Free;
begin
// under ARC, this method isn't actually called since the compiler translates
// the call to be a mere nil assignment to the instance variable, which then calls _InstClear
{$IFNDEF AUTOREFCOUNT}
if Self <> nil then
Destroy;
{$ENDIF}
end;
Автор: dred2k
Дата сообщения: 10.09.2014 16:41
Dukekz
Дерево фактически строится заново. Так ведь ? Попробуй:

Код:
if (Action == trDBChangeParent)
{
TreeView->DataSource->DataSet->DisableControls();
try
{
SetBranchData(KeyFieldValue, OldData, NewData);
TreeView->DataSource->DataSet->Close();
TreeView->DataSource->DataSet->Open();
}
__finally
{
TreeView->DataSource->DataSet->EnableControls();
}
}
Автор: Dukekz
Дата сообщения: 11.09.2014 11:17

Цитата:
Дерево фактически строится заново. Так ведь ? Попробуй:

Спасибо, попробовал. Результат в точности такой же, как и в моем коде, такой же AV ((

PS Вообще получалось в моем варианте, что хоть и происходил рефреш всего датасета, но все узлы остаются в том состоянии, что были до. Тобишь не происходит полное пересоздание всех итемов, как при первом открытии. Точно так же и в Вашем примере, с одним отличием, что после DisableControls(), Close() и Open() активным после вылета эксепшена становится первый узел в дереве. А все узлы что были открыты, продолжают оставаться такими, на своих местах.

ЗЗЫ Еще хотел спросить, не получается отлаживать в коде компонент DevExpress. В исходный код VCL проваливаюсь, а в компоненты - нет. Раньше вроде была опция в свойствах проекта UseDebugLibraries, а в XE5 не могу такой найти. Маршруты инклудов и либрари смотрят на папку с отладочными версиями девок. Их про компиляции туда само сложило. Что ему еще надо то?
Автор: dred2k
Дата сообщения: 11.09.2014 13:29
Dukekz
В BrowsingPath пропиши все каталоги с сырцами девок. Насчет успешного дебага - не гарантирую, но допускаю (проверять не охота, у меня прописано). Плюс код в среде будет открываться.

Цитата:
как при первом открытии

Ну, сравни код, что там волшебного делается...
Кстати, на датасете, датасорсе события висят ?

Автор: Dukekz
Дата сообщения: 11.09.2014 15:02

Цитата:
Кстати, на датасете, датасорсе события висят ?

Поотключал уже все. Сейчас вытащу этот кусок кода и компоненты в пустой проект, но мне кажется так же валиться будет.
Автор: Dukekz
Дата сообщения: 12.09.2014 09:12
В общем и в пустом проекте валится точно так же.

Шибко долго разбираться некогда, поэтому решил не пользоваться событием OnDBAction, перенес код в событие OnEndDragTreeNode. В нем рефреш работает без эксепшенов.
Автор: Chukotka
Дата сообщения: 14.09.2014 11:10
cxGrid - при использовании встроенного фильтра команда связанного с Grid DataSet.Last не всегда приводит к позиционированию грида на посл запись.
Как принудительно перевести фокус на последнюю отфильтрованную запись?
Автор: dred2k
Дата сообщения: 14.09.2014 11:20
Chukotka

Цитата:
Record Navigation

The GotoFirst, GotoLast, GotoNext and GotoPrev methods provided by a data controller allow you to navigate through visible rows in the order that they are displayed on screen. A row represents a potentially visible data record or a grouping row, which can be focused, selected and deleted. The order in which rows are displayed on screen is based on the sorting, filtering and grouping applied. Rows hidden within collapsed data groups cannot be accessed by these methods.


Navigation methods (GoToFirst, GoToLast, GoToNext and GoToPrev) provided by the View's controller work in a similar manner. However, these also enable you to move focus between master and detail Views.


To move focus between rows, you can change the focused row or its index explicitly. See the Focused/Selected Records topic for more information.


Data record navigation is performed differently in provider/unbound and bound modes.

In provider, unbound, server, and default bound modes, you can use record indexes to iterate through data records. To make a data record focused and visible at the same time, you can assign its record index to the data controller's FocusedRecordIndex property. Record indexes can vary from 0 to RecordCount – 1.

Note: Do not confuse the View's DataController.FocusedRecordIndex and Controller.FocusedRecordIndex properties. The former specifies the record index of the focused record, i.e. the position of the record in the data controller (this is equivalent to the RecordIndex property of the Controller.FocusedRecord object). The latter specifies the row index of the focused record, i.e. the record's visual position (this is equivalent to the Index property of the Controller.FocusedRecord object and to the DataController.FocusedRowIndex property)


In Grid mode, you should use methods provided by the TDataSet descendant associated with the data controller to navigate records.


ExpressQuantumGrid provides the end-user the ability to navigate records using an embedded View navigator control. This allows moving focus to the first, last, next and previous row and to the next and previous page.

Автор: V1s1ter
Дата сообщения: 21.09.2014 03:14
Всем
Использую Grid: TcxGrid без DataSet.
в дизайнере создан один стобец.
Если пишу в коде
GridTableView.DataController.RecordCount := 1;
GridTableView.DataController.Values[0, 0] := 5;
i := GridTableView.DataController.Values[0, 0];
то i становится равным 5.
Но если в пустом гриде нажать кнопку Append и набрать в ячейку 5, нажать энтерб нажать кнопку Post, то
i := GridTableView.DataController.Values[0, 0];
не срабатывает потому, что GridTableView.DataController.Values[0, 0] не присвоено ни одно значение? хотя на экран выводит 5. Забавно что при этом не определено.
Так-же столкнулся что
GridTableView.DataController.Values[0, 0] - неопределено, а
GridTableView.DataController.DisplayTexts[0, 0] равно "5".
В качестве редактора ячейки задан TcxCalcEditProperties, его свойство ImmediatePost := True;
Делфи ХЕ6 DevExpress 2014.1.4
Кто нибуть в курсе что за прикол?
Автор: dred2k
Дата сообщения: 21.09.2014 07:59
V1s1ter
Как я понял, ты используешь TcxGridTableView ?
Попробуй включить в DataController.Options.dcoImmediatePost.
Автор: SuPriTo
Дата сообщения: 21.09.2014 09:04

Цитата:
Кто нибуть в курсе что за прикол?

Я реализовывал собственный DataSource, унаследованный от TcxCustomDataSource.
В нем хранил необходимые данные.
Автор: asutp2
Дата сообщения: 21.09.2014 15:27

Цитата:
Я реализовывал собственный DataSource, унаследованный от TcxCustomDataSource. В нем хранил необходимые данные.

делал аналогично, все работает
Автор: dred2k
Дата сообщения: 21.09.2014 16:40

Цитата:
собственный DataSource

Плюс TdxMemData никто не отменял. Просто и наглядно, в подавляющем, как говорится, большинстве случаев.
Автор: V1s1ter
Дата сообщения: 21.09.2014 16:58
dred2k

Цитата:
Попробуй включить в DataController.Options.dcoImmediatePost.

Был включен.

Цитата:
Плюс TdxMemData никто не отменял.

Обычно я так и делаю, но ведь это же стандартная фича cxGrid...
Да и мне надо чтобы пользователь просто матрицу задал, cxGrid выбрал только из-за желания сохранить единообразие интерфейса.
ЗЫ Наблюдал еще одну штуку - в отладчике пишет, что пзначение ячейки не определено, а по if переходит как по определенному значению. Такие штуки огорчают.
Автор: dred2k
Дата сообщения: 21.09.2014 17:23
V1s1ter
А ты в каком месте проверяешь введенные данные ? По событиям грида (едитора и т.п.) ?
Поподробнее про это, плиз.
Если в неких событиях едита, то полезно вручную делать cxCustomEdit.PostEditValue.
Автор: SuPriTo
Дата сообщения: 21.09.2014 17:23

Цитата:
Обычно я так и делаю, но ведь это же стандартная фича cxGrid...

Я тоже по началу пытался сделать так, как вы, но у меня ничего не получилось. Стал смотреть в примерах, там сделано, как я описывал выше.
Автор: dred2k
Дата сообщения: 21.09.2014 17:35
V1s1ter
В том месте, где проверяешь введенные данные и видишь несоответствие, проверь DataController.IsEditing. Еще интересно, в каком значении при этом DataController.EditState.
Можно попробовать вызвать DataController.PostEditingData.
Хотя странно, навигатор по идее сам все это вызывать должен по своим кнопкам...
Автор: V1s1ter
Дата сообщения: 21.09.2014 21:22
SuPriTo

Цитата:
Я тоже по началу пытался сделать так, как вы, но у меня ничего не получилось.

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

Добавлено:
dred2k
Обратите внимание на скриншоье на
GridTableView.DataController.DisplayTexts[iRow, LocalColX]
GridTableView.DataController.DisplayTexts[iRow, LocalColY]
IsValue
Второй скриншот - то что отображается на экране в момент отладки.

https://imageshack.com/i/f0ryqqqQp

https://imageshack.com/i/p8DWOUrCp
Автор: dred2k
Дата сообщения: 22.09.2014 03:42
V1s1ter
Ну, тут можно было бы и через датасет сделать, я то думал, у тебя переменное кол-во столбцов, к примеру...
Кстати, я бы попробовал не просто TableView, а DBTableView в режиме Unbound. По хелпу вроде как самое оно.
А так костыль как костыль. Бывает.
Автор: V1s1ter
Дата сообщения: 22.09.2014 10:30
dred2k

Цитата:
я то думал, у тебя переменное кол-во столбцов

Так и есть
В любом случае спасибо. Дамал может кто теми же габлями получил, и знает где собака порылась.
Автор: V1s1ter
Дата сообщения: 27.09.2014 01:41
Всезнающему народу
Пара вопросов ао TcxGrid:
1) Есть ли какое красивое решение вопроса написания нижних/верхних индексов в заголовках таблиц?
2) Как задать рисование шапки таблицы в стиле В, рисует в стиле А?

Код:
А
--------------------------------------------
| | |Стоимость |
|--------|-----------------|--------|------|
|№ п/п |Наименование|покуп.|прод.|
---------------------------------------------

В
--------------------------------------------
| | |Стоимость |
|№ п/п |Наименование|---------------|
| | |покуп.|прод.|
--------------------------------------------
Автор: dred2k
Дата сообщения: 27.09.2014 04:24
V1s1ter

Цитата:
1) Есть ли какое красивое решение вопроса написания нижних/верхних индексов в  заголовках таблиц?

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

Цитата:
2) Как задать рисование шапки таблицы в стиле В, рисует в стиле А?

Как вариант - убрать показ заголовков, а "заголовки" оформить бандами.
Автор: Vadim153
Дата сообщения: 28.09.2014 20:52
Есть компонент LMD для открытия файла:



Есть ли подобное в DevExpress?
Не могу найти, ткните, плз.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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