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

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

Автор: OwnerZ
Дата сообщения: 26.10.2009 15:35
Вопрос

Подскажите пожалуйста а лучше поделитесь кодом.

как экспортировать в Excel второй, третий уровень из cxGrid

Понятно что ExportGridToExcel не экспортирует второй, третий уровень и надо написать что то самому но я только недавно столкнулся с cxGrid и всех тонкостей ещё не знаю.
Автор: ant0ni02004
Дата сообщения: 26.10.2009 20:20
OwnerZ

использовать параметр AExpand (в ExportGridToExcel):

The AExpand parameter indicates whether to export all records displayed within the exported level including records hidden within collapsed groups. If this parameter value is True, the grid expands all group and master records before exporting. If this parameter value is False, the records’ expanded state remains unchanged and only visible records’ content is written to the file.

Автор: vladman
Дата сообщения: 26.10.2009 23:58
neznayka3

Цитата:
подскажите как программно свернуть DockPanel, которая развернута. hide вообще ее скрывает.

Используйте <YourdxDockPanel>.AutoHide := True;
Автор: OwnerZ
Дата сообщения: 27.10.2009 09:12
ant0ni02004


Цитата:
использовать параметр AExpand (в ExportGridToExcel):


Открыл посмотрел

procedure ExportGridToExcel(const AFileName: string; AGrid: TcxGrid;
AExpand: Boolean; ASaveAll: Boolean; AUseNativeFormat: Boolean; const AFileExt: string);

Вот процедура

вот мой вызов

ExportGridToExcel('C:\TestExport.xls', cxGrid, True, True, True,'xls');

поставил AExpand в True. И все равно мне переносится один верхний уровень. Под уровень не берется может ещё где то что то надо указать.
Автор: vladman
Дата сообщения: 27.10.2009 12:26
OwnerZ

Цитата:
ExportGridToExcel('C:\TestExport.xls', cxGrid, True, True, True,'xls');
поставил AExpand в True. И все равно мне переносится один верхний уровень

Предложенное вам решение действительно работает, но только при экспорте View с группами.

Цитата:
The AExpand parameter indicates whether to export all records displayed within the exported level...

Т.е. содержимое только одного (Focused) View/Leve может быть экспортировано.

В случае многоуровневых cxGrid нет способа экспортировать все уровни в один excel файл.
Подробнее смотрите в Knowledge Base:
Why are detail views not exported when ExportGrid4ToExcel is called?
И еще одна статья по теме
A1113 - Detail View Export
Автор: FyodorovMA
Дата сообщения: 27.10.2009 12:28
Использую TcxDBTreeList для отображения структуры деревьев базы данных.
Для работы с БД использую также FibPlus. Все действия произвожу с кэшем таблиц, до глобального подтверждения транзакций.
При удалении узла, который содержит подгруппы не удаляются эти подгруппы, а удаляется только родитель (хотя стоит каскадное удаление).
Если транзакцию удаления подтвердить и заново считать данные, то все ок.
А тут как быть?
Автор: X11
Дата сообщения: 27.10.2009 12:28

Цитата:
использовать параметр AExpand

Это если у тебя сгруппирована таблица.

А так, да, мне бы тоже было бы интересно, как...
Вопрос в том, что эксель и cxGrid - разные вещи абсолютно. А по сему, думаю, что нет простого способа экспортировать многоуровневый cxGrid в эксель. Подумай, как это всё разместить в экселе? Вот как бы ты разместил?
Автор: volser
Дата сообщения: 27.10.2009 13:11
FyodorovMA
Пройтись по дереву и удалить лишние записи.
Автор: neznayka3
Дата сообщения: 27.10.2009 14:01
есть xcTreeList с 5-6 уровнями и колонкой chechbox. появился в новых версиях функционал - при установке\отмене родителя все дети тоже становятся checked\unchecked?
Автор: OwnerZ
Дата сообщения: 27.10.2009 14:09
vladman

Ну хорошо а как самому написать есть ли примеры посмотреть как взять первый уровень потом второй.
Затем опять первый второй и до конца.
Автор: volser
Дата сообщения: 27.10.2009 14:14
OwnerZ
У вас нет исходников что бы посмотреть реализацию?
Автор: f3ka
Дата сообщения: 27.10.2009 14:16
OwnerZ
про рекурсию слышали? если нет срочно читать... и тогда такие вопросы "как удалить ветку из трилиста" отпадут сами собой
Автор: OwnerZ
Дата сообщения: 27.10.2009 14:53
volser

f3ka

Чета я ваще запутался и не знаю куда мне дальше копать.

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

и как понять где родительский а где подчиненый.

Извиняйте за такие вопросы но надо же с чего то учится.
Автор: f3ka
Дата сообщения: 27.10.2009 14:57
OwnerZ
надо учиться с книжек, хелпа или нанять репититора (за деньги)...
Автор: OwnerZ
Дата сообщения: 27.10.2009 15:02
f3ka

Спасиб ты настоящий добрый человек. Поддержал.

Автор: vladman
Дата сообщения: 27.10.2009 15:20
neznayka3

Цитата:
появился в новых версиях функционал - при установке\отмене родителя все дети тоже становятся checked\unchecked?

Да.

Цитата:
The parent node keeps track of child states, and automatically changes its state to unchecked (if the two-state mode is enabled) or grayed (if the three-state mode is enabled), if one of its checked children has been unchecked or grayed.


Добавлено:
f3ka

Цитата:
OwnerZ
про рекурсию слышали? если нет срочно читать... и тогда такие вопросы "как удалить ветку из трилиста"

Вы немного ошиблись. OwnerZ спрашивал про экспорт из cxGrid.
OwnerZ

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

При таком подходе у вас будет очень много различных *.xls файлов. Это вас устраивает?
А разве в приведенных мною ссылках не было примера? В *A1113 - Detail View Export* есть отличный пример.

Добавлено:

FyodorovMA

Цитата:
При удалении узла, который содержит подгруппы не удаляются эти подгруппы, а удаляется только родитель (хотя стоит каскадное удаление).
Если транзакцию удаления подтвердить и заново считать данные, то все ок.

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

Цитата:
А тут как быть?

Подтверждать транзакцию сразу же после удаления записи и делать FullRefresh.
Автор: OwnerZ
Дата сообщения: 28.10.2009 09:13
vladman

Ваш пример отличен пробую его реализовать у себя ноу меня ругается на
Цитата:
ExportDetailToExcelFromGrid(grdPriceSummary,
TClientDataSet(TcxGridDBTableView(dbtvPriceDetails).DataController.DataSet),
GetFormatFileNameWithoutExtension('PDV3'),
ExportedTo);


в частности

Цитата:
[Error] Undeclared identifier: 'TClientDataSet'


Подскажите что подключать.

Добавлено:
ага нашел
DBClient

Добавлено:
vladman

Нет не подходит ваш пример к сожалению.



Добавлено:
vladman

Прошу прощения действительно все Экспортирует первый второй уровень.

Но теперь другая проблема почему то он мне экспортирует все данные в китайском языке(улыбнуло как увидел).

Вопрос с чего вообще он это делает и не знаете ли вы случайно как это исправить.
Автор: vladman
Дата сообщения: 28.10.2009 11:17
OwnerZ

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

Во-первых, пример не мой, а некоего Philip Verdieck, подправленный DevExpressом.
Во-вторых, откуда мне знать что и как у вас установлено. Вроде Philip Verdieck не китайская фамилия , так что проблема скорее всего у вас локально.
Давайте свой пример, посмотрим что не так.
Автор: OwnerZ
Дата сообщения: 28.10.2009 11:30
Значит выглядит это так

ExportDetailGridToFile('C:\Test', 1, cxGrid,
cxGridDBTableView, True, True, True, '', '', '', 'xls'); - Значит если ставить параметр AExportType равным 1 то экспортирует только 1й уровень на русском языке все ок стили и все прочее есть.


Автор: volser
Дата сообщения: 28.10.2009 11:31
OwnerZ

Цитата:
все данные в китайском языке

Это проблема неуникодовских программ. Delphi до 2009 тоже неуникодовская. Смотрите настройки виндовс.
Автор: OwnerZ
Дата сообщения: 28.10.2009 11:33
Повтор

ExportDetailGridToFile('C:\Test', 1, cxGrid,
cxGridDBTableView, True, True, True, '', '', '', 'xls'); - Значит если ставить параметр AExportType равным 1 то экспортирует только 1й уровень на русском языке все ок стили и все прочее есть.

AExportType равным 2 то экспортирует все уровни но на китайском стили и все прочее есть.

Добавлено:
volser

vladman


Не думаю что это внутренние настройки. Хотя щас пойду попробую на висте экспортнуть

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

Добавлено:
я вот думаю

он же в процедуре создает

AGridExport := GetExportClassByDetailGridView(AGridView).Create(AFileName, AExportType, AGridView, AGrid, nil);

Может тут?
Автор: JohnSilver182
Дата сообщения: 28.10.2009 15:23
Думал как при потери фокуса формой , убрать ее dxDockPanel-s
Набросал процедуру и вижу все компоненты кроме dxFloatDockSite и dxDockPanel

Код: Procedure HideFloat(a_Form:TCustomForm);
var i:integer;
begin
for i:=0 to a_Form.ControlCount-1 do
begin
Form1.ListBox1.Items.Add(a_Form.Controls[i].Name);
end;
end;
Автор: SIgor33
Дата сообщения: 28.10.2009 16:03
Произвожу изменения в базе, а потом обновляю датасет. Необходимо, что бы плюсики (группировка по 3м полям) открылись до самого нижнего уровня. Почему-то получается только до предпоследнего

Делаю так:
rowid :=-1;
while true do
begin
OraQuery2.Locate('mainid',row,[]);
ARecord := cxGridDBTableView1.Controller.FocusedRecord;
if Assigned(ARecord) then ARecord.Expanded := true;
if rowid <> cxGridDBTableView1.Controller.FocusedRowIndex
then rowid := cxGridDBTableView1.Controller.FocusedRowIndex
else break;
end;
Автор: volser
Дата сообщения: 28.10.2009 17:05
SIgor33
cxGrid1DBTableView1.DataController.Groups.FullExpand;
Автор: vladman
Дата сообщения: 28.10.2009 18:17
JohnSilver182

Цитата:
Набросал процедуру и вижу все компоненты кроме dxFloatDockSite и dxDockPanel

Все верно, только вместо ControlCount и Controls[i] используйте ComponentCount и Components[i]
Автор: SIgor33
Дата сообщения: 29.10.2009 09:26
volser
Спасибо Вам Огоромное. Вы дали за два дня кучу полезного для размышления и не только в этой ветке
Автор: mdid
Дата сообщения: 29.10.2009 15:48
подскажите плз...можно ли как то обращаться к данным GridBandedTableView1..напрмир по имени колонки?...ибо GridBandedTableView1.DataController.GetValue уж очень неудобное так как при удалении колонки меняются и номера колонок...у меня сейчас документы в разработке и каждый раз менять это геморно и небезопастно
Автор: data man
Дата сообщения: 29.10.2009 16:09
mdid
TableView.FindItemByName(const AName: string) и TableView.GetColumnByFieldName(const AFieldName: string) подойдут ?
Автор: f3ka
Дата сообщения: 29.10.2009 16:24
mdid
для получения значения (например выделеной строки) используем

Код:
<YourTableView>.DataController.Values[<YourTableView>.DataController.FocusedRecordIndex, <YourColumnName>.Index]
Автор: brookson
Дата сообщения: 29.10.2009 17:06
Доброго всем времени суток!

Натолкнулся на неожиданную проблему. Есть датасет, к нему привязан cxGrid. Редактировать в гриде можно только одно поле (Column.Editing=True).

Мне необходимо обработать BeforePost событие для грида. Но тут вылезла неожиданная проблема - ложное срабатывание.
В гриде первая колонка - это столбец CheckBox, не привязанный к данным. Его тоже можно редактировать.
И когда пользователь "отмечает" запись, а потом с неё уходит, срабатывает BeforePost.
Не знаю, как отфильтровать эти ложные срабатывания.
Помогите!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

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


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