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

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

Автор: Dronton2
Дата сообщения: 13.07.2007 13:25
Shadi
Используй OnGetDisplayText/
Автор: Shadi
Дата сообщения: 13.07.2007 14:07
Dronton2
А ш-ш-код маленький в студию, плиз..

Добавлено:
Dronton2

Спасибо за помощь = ты сдесь класно рулишь!!!


Цитата:
Используй OnGetDisplayText/


Да можно и так, но это все равно что гланды через ...

Есть другое решение. Думаю, что может кому-то и пригодиться:


Код:
if GridDB.ColumnCount = 0 then
begin
GridDB.dataController.DetailKeyFieldNames := 'Фонд-клиент;ОперДата';
// GridDB.dataController.CreateAllItems;
for I := 0 to spRun.FieldCount - 1 do // Iterate
begin
BField := GridDB.CreateColumn as TcxGridDBColumn;
BField.Caption := spRun.Fields[i].FieldName;
BField.DataBinding.FieldName := spRun.Fields[i].FieldName;
if spRun.Fields[i].DataType = ftFloat then
begin
BField.PropertiesClassName := 'TcxCurrencyEditProperties';
TcxCurrencyEditProperties(BField.Properties).DisplayFormat := ',0.00';
end
else
if spRun.Fields[i].DataType = ftInteger then
begin
BField.PropertiesClassName := 'TcxCurrencyEditProperties';
TcxCurrencyEditProperties(BField.Properties).DisplayFormat := ',0';
end;
end; // for
GridDB.RestoreFromIniFile(gridIni, True, False, AOptions, ASaveViewName);
end;
end;

Автор: saltmi1
Дата сообщения: 15.07.2007 07:30
Я не очень понимаю как работает Expand в Master-Detail. У меня cxGrid, в котором 2 уровня. Нужно: Нажимая на + раскрывается только один detail и одновременно закрываются все остальные раскрытые detail. При этом курсор должен перейти на поле раскрыттого мастера (сейчас курсор остается на старом месте пока не нажму на сам raw).
Я понимаю, что, скорее всего, в документации это есть, но я не нашел. Очень бы хотелось найти эти возможности в designtime - по-видимому понадобятся много раз в моей программе.
Автор: Dronton2
Дата сообщения: 16.07.2007 08:54
Shadi
Есть ещё возможность:

Код: if spRun.Fields[i].DataType = ftFloat then
if spRun.Fields[i].DisplayFormat := ',0.00';
Автор: jicoff
Дата сообщения: 16.07.2007 12:07
saltmi1

А что мешает после раскрытия детейла выставить на него фокус, а заодно закрыть все остальные детейлы?
Автор: saltmi1
Дата сообщения: 16.07.2007 12:16
jicoff
Какой метод предложил бы вызвать для этого решения?
Мне просто трудно поверить, что этой возможности не встроено в designtime. В принципе это ведь должно быть вполне общее поведение в каком угодно tree. Возможность автоматического свертывания всех узлов кроме того который интересует в данный момент.

Автор: Dennica
Дата сообщения: 16.07.2007 14:23
saltmi1
Если выставить у мастера DetailInSQLMode то кажись можно будет разворачивать только по одному узлу.

Свернуть все можно еще так:
ViewData.Collapse(True);

Развернуть текущую группу:
if ...Controller.FocusedRow.Expandable then
...Controller.FocusedRow.Expanded := True

Автор: OXDBA
Дата сообщения: 16.07.2007 15:09

Цитата:
Если выставить у мастера DetailInSQLMode то

и Detail DataSet должен быть параметризированным.
Автор: saltmi1
Дата сообщения: 16.07.2007 15:31
OXDBA
Dennica

Цитата:
и Detail DataSet должен быть параметризированным.


Цитата:
Если выставить у мастера DetailInSQLMode то кажись можно будет разворачивать только по одному узлу.

Думаю, что это оно и есть. Спасибо товарищи.
Автор: jicoff
Дата сообщения: 16.07.2007 17:29
Dennica

Мне что-то совсем не понятно, как без DetailInSQLMode получить + для детейлов?
Автор: MaXon84
Дата сообщения: 16.07.2007 21:35
Здравствуйте! Подскажите пожалуйста ,если кто работал с XtraPrintingSystem, как правильно отрисовывать Image на PrintControl. Столкнулся со следующей проблемой:
1. Имею набор Image-ов (страницы документа);
2. Начинаю отрисовывать их по мере их просмотра;
3. Отрисовываю страницы, используя их же размеры;
4. При отрисовке получается не то что надо, то ли размеры не те, то ли по другому делать надо. Если кто знает подскажите пожалуйста, очень надо!!!

Функция, выполняющаяся перед отрисовкой страницы

void printingSystem1_BeforePagePaint(object sender, PageEventArgs e)
{


Image img; страница
if (e.Page.Index < massPage.Length)//massPage.Length-массив страниц
{
if (massPage[e.Page.Index] == 0)
{
/* происходит заполнение img */
printingSystem1.Graph.DrawImage(img,
new RectangleF(new PointF(0, printingSystem1.Graph.ClientPageSize.Height * e.Page.Index), printingSystem1.Graph.ClientPageSize),
BorderSide.None, Color.Transparent).SizeMode = PictureBoxSizeMode.Zoom;
massPage[e.Page.Index] = 1;
printingSystem1.End();
}

}
printingSystem1.Graph.ClientPageSize.Height * e.Page.Index)-для перехода на начало следующей страницы.
Автор: Dennica
Дата сообщения: 17.07.2007 06:52
jicoff

Цитата:
Мне что-то совсем не понятно, как без DetailInSQLMode получить + для детейлов?


можно связать мастер и детали используя сво-ва
MasterKeyFieldNames
DetailKeyFieldNames

При этом нужно чтобы детали содержали все записи которые могут потребоваться. Фильтрацию осуществляет сам грид. организация мастер-деталей таким образом работает намного шустрей например для небольших справочников чем постоянное обращение за деталями в БД.
Автор: AlphaBet
Дата сообщения: 17.07.2007 10:12
Коллеги, кто нибудь пользовался в проектах FastMM? Это модуль-менеджер памяти? отлавливает утечки памяти в проектах. Так вот у меня при использовании компоненты TcxSpreadSheetBook, постоянно вылазят утечки памяти. Уже столкнулся с парой глюков, отловил их с помощью EurekaLog и FastMM. Например при изменении стиля нескольких тысяч ячеек (4-5-6тыс.) при закрытии формы возникает куча ошибок. Переполнялся список ундо команд. Решил его частой очисткой истории редактирования. Все равно вылазят ошибки. Кто то может прокоментировать такую работу компонентов? Может есть какие то стабильные версии этих компонент без ошибок? Как то тратить время на отлов глюков не хочется... Кстати не только с этим компонентом проблемы. Компонента скинов сразу же вызывает утечки памяти, об этом говорит FastMM.
Автор: jicoff
Дата сообщения: 17.07.2007 12:34
Dennica

Это очень интересная информация, у меня для детейлов обычно процедура вызывается, поэтому даже и не задумывался о других возможностях. Попробую воспользоваться ею, у меня есть в одном месте в программе тормоза, может поможет.
Автор: Dronton2
Дата сообщения: 17.07.2007 17:16
Столкнулся с неприятной вещью:
Пользователь в компоненте TcxFilterControl задает фильтр для грида и сохраняет его:
FilterCtl.SaveToStream(Stream);
На следующий день пользователь открывает грид, загружает фильтр, выполняя
FilterCtl.LoadFromStream(Stream).
Всё хорошо до тех пор, пока количество колонок или их порядок в гриде не поменяются. В этом случае получается полная каша: Если добавить в грид колонку в начало списка, то загруженный фильтр не поёмёт этого, и в фильтре будут отображены названия соседних еолонок, вместо нужных.
Чую, что придётся писать самостоятельно процедуры сохранения и загрузки из потока.
Кто-нибудь лечил это?
Автор: saltmi1
Дата сообщения: 17.07.2007 19:30
jicoff
Ты извини, что я суюсь с советом.

Цитата:
можно связать мастер и детали используя сво-ва
MasterKeyFieldNames
DetailKeyFieldNames

Хотел просто уточнить, что надо всегда выставлять в DataController GridMode True, иначе будут проблемы, промучился раз почти целый день с этим.

Автор: zver
Дата сообщения: 17.07.2007 22:38
В программе есть cxGrid. У грида два TableView связанных по Master-Detail.
Для TableView1 (Master) текущая позиция узнаётся без проблем или по гриду или по датасорсу.
Для TableView2 (Detail) текущая позиция ="-1" а датасорс на первой позиции вне зависимости от того, что выбрано.
И собственно вопрос: Как узнать позицию курсора в Detail-таблице?

Добавлено:
Тут немного подумал. Можно конечно через Ж*** индек получить:
"
TcxCustomGridRecord* ARecord = TableView1->Controller->FocusedRecord;
int Index = ARecord->RecordIndex;
int RelIndex = ARecord->ViewData->DataController->GetDetailActiveRelationIndex(Index);
TcxCustomDataController* DetailDataController = TableView1->DataController->GetDetailDataController(Index,RelIndex);
ShowMessage(DetailDataController->Values[DetailDataController->FocusedRowIndex][1]);
"

Но а просто по набору TableView2 (Detail) нельзя???

Добавлено:
Что по каждой строке MasterTableView создается свой DetailDataController что-ли?
Автор: Shadi
Дата сообщения: 18.07.2007 09:23
Dronton2

Насчет потока не пробовал, то через SaveToFile работает с большим количеством полей
(~100 полей) и меняется туда сюда без проблем..

Потом сохраняю инишник и filter.flt в полях-блобе...

Получаю именнованые снимки, которые при желании на лету могут менять настройки грида.



Код:
if Grid.FocusedView <> nil then
if Length(TcxGridDBTableView(Grid.FocusedView).DataController.Filter.FilterText) > 0 then
begin
try
AFilterControl := TcxFilterControl.Create(Self);
AFilterControl.LinkComponent := GridDB;
AFilterControl.SaveToFile('filter.flt');
finally // wrap up
AFilterControl.Free;
end; // try/finally
end;
Автор: Dronton2
Дата сообщения: 18.07.2007 10:19
Shadi
Спасибо, но ситуация в другом:
Допустим, вначале были колонки с именами: 'город', 'улица' и '№ дома'. При этом, грид привязан к датасету и колонки привязаны к полям f2, f3 и f4 соответственно. И фильтр был такой:
FilterCaption: (город = Ростов)
FilterText: (f2 = 237).
Сохраняем фильтр п потоке (или файле, это всё равно).

Через несколько дней пользователь добавляет в датасет поле f1 'область' (поля формируются динамически и это поле будет в списке на первом месте), добавляется соответствующая этому полю колонка в грид.
Загружаем фильтр и видим:
FilterCaption: (область = Ростов)
FilterText: (f1 = 237).
При этом, на самом FilterControl отображается: 'область = ', т.к. это Lookup-поле и в выпадающем списке для поля 'область' отсутствует значение 'Ростов'.
Т.е. в фильтре поля сместились.
Видно, придётся писать процедуры сохранения и чтения фильтра самостоятельно, привязываясь к названиям полей в датасете.
Автор: Shadi
Дата сообщения: 18.07.2007 11:38
Dronton2


Можешь смастерить маленький пример с твоей проблемой? Чтобы глянуть в действии..
Где у тебя храняться настройки грида? Сразу может после создания поля f1 надо УДАЛЯТЬ файл настройки и пересоздавать его???
Автор: jicoff
Дата сообщения: 18.07.2007 11:58
zver

Да, именно так.

Добавлено:
saltmi1

Не совсем понял, для какого случая нужно выставлять GridMode = True, когда все данные в DataSet мастаре и DataSet детейле есть? Мне еще не приходилось пользоваться GridMode = True, а практически все гриды с детейлами.
Автор: Barsakov
Дата сообщения: 18.07.2007 15:45
Здравствуйте,
использую ExpressPivotGrid.v1.1.0 и возникло несколько вопросов:

1. Возможно ли сделать расчет GrandTotal'a независимо от таблицы. Т.е. я так понимаю какой укажешь в значениях SummaryType(stMax,stMin,stAverage и т.д.) такой и будет расчет GrandTotal'a. А мне необходимо в таблице показывать среднее значение за сутки, а GrandTotal'е отобразить сумму этих средних значений за весь период.
Возможно ли такое сделать в этом компоненте? Или как это лечится?

2. У меня большое количество группирующих столбцов из-за этого не видно самих значений.Я уменьшаю ширину столбцов до 1(это максимум) После чего прорисовывается жирная полоска из спрятанных столбцов.Есть ли другой вариант спрятать столбцы?

P.S. По данным вопросам смотрел на оф. сайте, но ничего подобного не нашел.
Автор: drunk2
Дата сообщения: 20.07.2007 08:31
Как приклеить последний столбец к правой стороне, как в explore? Банды не предлагать.
Автор: Dronton2
Дата сообщения: 20.07.2007 10:12
Shadi
маленький пример не получится. Процедуры сохранения уже написал, привязываются к названию поля в базе данных.
drunk2
У меня в эксплорере последний столбец не привязывается к правой стороне. Или я не тот эксплорер смотрю?
Проще использовать бэнды. Иначе придется отслеживать несколько событий и менять в них ширину колонки.
Автор: drunk2
Дата сообщения: 20.07.2007 11:49
Dronton2
Не совсем точно выразился. В эксплорере 'бесконечный' хидер, его нельзя сузить, вернее его последний пустой столбец. Попробуйте сузить колонки, чтобы хидер был не на всю ширину окна - не получится. Видел такое в гридах многих программ, тоже хочу.
Автор: Shadi
Дата сообщения: 20.07.2007 12:32
Barsakov


Цитата:
Возможно ли сделать расчет GrandTotal'a независимо от таблицы.


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




Цитата:
Т.е. я так понимаю какой укажешь в значениях SummaryType(stMax,stMin,stAverage и т.д.) такой и будет расчет GrandTotal'a


ДА


Цитата:
А мне необходимо в таблице показывать среднее значение за сутки



Только если подставлять селект из твоей таблицы -> select avg(поле таблицы) from MyTable..


Цитата:
У меня большое количество группирующих столбцов из-за этого не видно самих значений


бр-р-р-р.. НЕ понятки??? Что ты имел ввиду? Покажи скрин!
Автор: Barsakov
Дата сообщения: 20.07.2007 17:15

Цитата:
бр-р-р-р.. НЕ понятки??? Что ты имел ввиду? Покажи скрин!

Ну когда в поле Row Field ставлю грубо говоря больше 10 столбцов, то значения уже не видно. Вот теперь не могу их корректно спрятать. И так чтоб структура таблицы не ломалась.
Автор: Dronton2
Дата сообщения: 23.07.2007 10:47
drunk2
TableView.OptionsView.ColumnAutoWidth := true; будет пропорционально менять ширину всех колонок.
Чтобы менять ширинутолько одной (или нескольких) колонок, то нужно для остальных Item указать: BestFitMaxWidth := <integer>;
или Options.HorzSizing := False;
Автор: HiTech2003
Дата сообщения: 24.07.2007 14:32
Добрый день! Интересует следующий вопрос: как в Quantum Grid-е наиболее простым образом осуществить рассчет group summary по своему алгоритму, а не используя стандартные формулы типа skSum, skAverage и т.п.? Т.е, грубо говоря, можно ли при рассчете summary для группы получить доступ к строкам, входящим в нее и работать только с ними и если можно, то как это сделать?
Автор: Dronton2
Дата сообщения: 24.07.2007 16:54
HiTech2003
Используй TcxDataSummaryItems.OnSummary
В хэлпе есть пару примеров. Вот один из них:

Код: procedure TForm1.cxGrid1DBTableView1TcxGridDBDataControllerTcxDataSummary
DefaultGroupSummaryItemsSummary(
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
var OutArguments: TcxSummaryEventOutArguments);
var
AArea, APopulation: Extended;
begin
//Locate a value in the specific record for Area item
AArea := ASender.DataController.Values[Arguments.RecordIndex, DBTableView1Area.Index];

//Locate a value in the specific record for Population item
APopulation := ASender.DataController.Values[Arguments.RecordIndex, DBTableView1Population.Index];
//Set population density to Value
OutArguments.Value := APopulation / AArea;
end;

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

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


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