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

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

Автор: Cryogen2003
Дата сообщения: 15.06.2010 21:58
vladman
Возможно ли в шедулер и его диаграмме ганта сделать так, что бы можно было создать какое-то задание по какому-то клиенту для одного из сотрудников (делать это может только супервизор). Сам сотрудник мог бы отписать по этому заданию какой-то комментарий или комментарии (но при это не мог сделать ничего с самим заданием). Причем можно было раздавать задания нескольким сотрудникам по одному клиенту.
Вообщем, можно ли это сделать стандартным способом в шедулере или как это можно обыграть по другому?

Надо отобразить в PivotGrid следующие данные:
Сотрудник, Регион, Дата обзвона, Кол-во клиентов, которые обзвонил, Кол-во клиентов, которые захотели участвовать в той или иной программе банка, Процент качества обзвона

Группировка самого пивота идет по дате (Column), в Data уходят оба поля с кол-во клиентов и процент качества обзвона, в Row ФИО сотрудника и региона.
Стало быть затык с процентов качества обзвона клиента. Считается тупо так - кол-во клиентов, которые захотели участвовать в чем-либо / кол-во клиентов, которым звонили * 100.
Я могу посчитать это все в оракле, проблемы нет, но когда начинаешь в рилтайме переставлять поля, то понятно уже проценты не соответствуют истине в тех же группах Row.
Стало быть, как сделать так, чтобы все было правильно?
Автор: antaresSCO
Дата сообщения: 15.06.2010 23:19
Привет. Давно мучаюсь проблемой с гридом этой библиотеки cxGrid (dxGrid).
Есть колонка подключенная к полю датасета, которая тянет значения из другого датасета по индексу.
Когда я хочу включить фильтр по данному полю (кликаю на заголовок) - выпадает список "подтянутых" значений в совершенно невразумительной сортировке...
Проблема именно в этой сортировке. Помогибе, плиз.
Автор: vladman
Дата сообщения: 16.06.2010 01:20
Cryogen2003
Ну смотрите, чтобы это все промоделировать у себя нужно определенное время, которое вы уже наверняка потратили, и, более того, не факт, что мое понимание/воспроизведение вашей ситуации будет в точности соответствовать вашим условиям. Поэтому, мне кажется, что небольшое усилие с вашей стороны для создания примера иллюстрирующего настоящее положение вещей будет более чем полезно. Т.е попробуйте создать простой пример с начальными условиями, опирающийся на, например, мэмтэйбл(ы)/классы, соответствующие вашей структуре данных/объектов. В общем, я так понимаю, мы же за повторное использование кода .

Добавлено:
antaresSCO

Цитата:
Проблема именно в этой сортировке. Помогибе, плиз.

Что в вашем понимании невразумительная? Давайте скриншот списка и настройки вашего тэйблвью из дфм файла. Как по мне, список
Цитата:
"подтянутых" значений
уже сортирован.
Автор: linker_2009
Дата сообщения: 16.06.2010 04:40
X11
dxSkinController нельзя выбрать в компонентах, он сам все компоненты контролирует.
на главной форме еще нужен cxLookAndFeelController, тоже в еденичном экземпляере.
и еще нюанс, если вы добавили dxSkinController,cxLookAndFeelController на готовую форму, в компонентах возможно нужно вручную выставить LookAndFeel.SkinName (Бывает глючит)
Автор: antaresSCO
Дата сообщения: 16.06.2010 07:05
vladman
Согласен, выразился я некорректно "неопределённо" в моём случае получается по индексному полю второго датасета через которое происходит связывание (полей во второй таблице всего 2 - ID - integer NAME - varchar и в запросе для второго датасета применяю order by NAME), а сортировка в выпадающем списке фильтра всё равно идёт по ID второй таблицы (скриншоты не нашёл куда вставлять на этом форуме, надеюсь объяснил понятно).
Я никогда не ковырялся в *.DFM, но надеюсь выцепил нужное (описание прочих колумнов выбросил - там и так много строк):
object DBGrid1: TcxGrid
Left = 0
Top = 0
Width = 1256
Height = 289
Align = alClient
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = cxcbsNone
PopupMenu = MPopZakaz1
TabOrder = 0
TabStop = False
OnEnter = DBGrid1Enter
LookAndFeel.Kind = lfOffice11
LookAndFeel.NativeStyle = False
object DBGridDBBandedTableView1: TcxGridDBBandedTableView
OnDblClick = DBGridDBBandedTableView1DblClick
OnKeyPress = DBGridDBBandedTableView1KeyPress
NavigatorButtons.ConfirmDelete = False
OnFocusedItemChanged = DBGridDBBandedTableView1FocusedItemChanged
OnFocusedRecordChanged = DBGridDBBandedTableView1FocusedRecordChanged
DataController.DataSource = DMDoc.DSourceZakaz1
DataController.Filter.AutoDataSetFilter = True
DataController.Summary.DefaultGroupSummaryItems = <>
DataController.Summary.FooterSummaryItems = <
...
end>
DataController.Summary.SummaryGroups = <>
Filtering.ColumnMRUItemsList = False
OptionsBehavior.AlwaysShowEditor = True
OptionsBehavior.FocusFirstCellOnNewRecord = True
OptionsBehavior.GoToNextCellOnEnter = True
OptionsBehavior.FocusCellOnCycle = True
OptionsData.Deleting = False
OptionsData.Inserting = False
OptionsSelection.HideFocusRectOnExit = False
OptionsView.NoDataToDisplayInfoText = ...
OptionsView.Footer = True
OptionsView.GroupByBox = False
OptionsView.GroupFooterMultiSummaries = True
OptionsView.GroupFooters = gfAlwaysVisible
OptionsView.BandHeaders = False
Styles.OnGetContentStyle = DBGridDBBandedTableView1StylesGetContentStyle
Bands = <
item
Caption = ...
FixedKind = fkLeft
end
item
Caption = ...
end
item
Caption = ...
end
item
Caption = ...
end>
...
object DBGridZakaz1Price: TcxGridDBBandedColumn
Tag = 5
Caption = #1055#1088#1072#1081#1089
DataBinding.FieldName = 'PRICE_NAME'
HeaderAlignmentHorz = taCenter
Options.Editing = False
Options.Focusing = False
Width = 85
Position.BandIndex = 1
Position.ColIndex = 2
Position.RowIndex = 0
end
...

Автор: linker_2009
Дата сообщения: 16.06.2010 07:42
[b]antaresSCO[/b]
прячте код под тегом more
Если я вас правильно понял, то лучше вам сделать запрос из двух таблиц и связать их значения например так
[more=Пример]
Table1,Table2 - таблицы
у table1 поля
Id
refID-ссылка на id в table2
...
у table2 поля
id
name

ваш запрос будет вида
Select Table1.id, ...,table2.name from Table1,Table2 where (table1.refID=Table2.ID)

при таком запросе сортировка по Name в гриде будет "правильно" работать
[/more]
Автор: liron111
Дата сообщения: 16.06.2010 08:48
Друзья, у меня проблема вот какого характера:
Создаю TcxDBFilterControlФильтр на основании выделенных полей

procedure TParamForm.ForwardButtonClick(Sender: TObject);
var
select : String;
begin
// проверка грида на отмеченные поля
cxGrid1DBTableView1.DataController.GotoFirst;
select := '';
while not cxGrid1DBTableView1.DataController.IsEOF do
begin
if cxGrid1DBTableView1Column1.EditValue=true then
begin
DBFilterControl.Items.Add;
DBFilterControl.Items[DBFilterControl.Items.Count-1].Caption := ParamFIBDS.FieldByName('DISPLAY_LABEL').AsString;
DBFilterControl.Items[DBFilterControl.Items.Count-1].FieldName := ParamFIBDS.FieldByName('TABLE_NAME').AsString + '.'+ ParamFIBDS.fieldByName('FIELD_NAME').AsString;
//Определяем редактор
if ParamFIBDS.FieldByName('EDITOR').AsString = 'TextEdit' then
begin
DBFilterControl.Items[DBFilterControl.Items.Count-1].PropertiesClass := TcxTextEditProperties;
end
else if ParamFIBDS.FieldByName('EDITOR').AsString = 'DateEdit' then
begin
DBFilterControl.Items[DBFilterControl.Items.Count-1].PropertiesClass := TcxDateEditProperties;
end
else if ParamFIBDS.FieldByName('EDITOR').AsString = 'ComboBox' then
begin
DBFilterControl.Items[DBFilterControl.Items.Count-1].PropertiesClass := TcxComboBoxProperties;
// Наполняем ComboBox
DM.Combo_BoxFIBDS.ParamByName('table').AsString := ParamFIBDS.FieldByName('TABLE_NAME').AsString;
DM.Combo_BoxFIBDS.ParamByName('field').AsString := ParamFIBDS.FieldByName('FIELD_NAME').AsString;
DM.Combo_BoxFIBDS.Open;
DM.Combo_BoxFIBDS.First;
while not DM.Combo_BoxFIBDS.Eof do
begin
TcxComboBoxProperties(DBFilterControl.Items[DBFilterControl.Items.Count-1].Properties).Items.Add(DM.Combo_BoxFIBDS.FieldByName('STORE').AsString);
DM.Combo_BoxFIBDS.Next;
end;
DM.Combo_BoxFIBDS.Close;
end
else if ParamFIBDS.FieldByName('EDITOR').AsString = 'CalcEdit' then
begin
DBFilterControl.Items[DBFilterControl.Items.Count-1].PropertiesClass := TcxCalcEditProperties;
end
else if ParamFIBDS.FieldByName('EDITOR').AsString = 'SpinEdit' then
begin
DBFilterControl.Items[DBFilterControl.Items.Count-1].PropertiesClass := TcxSpinEditProperties;
end;
end;
end;
После всего этого, если в фильтре задать для числовых значений, в любом редакторе, запрос "Между 4 и 24", фильтр сформирует запрос типа "Имя таблицы.Название поля beetwen 24 and 4", что соответственно не обрабатывается ни одной БД. Я так понимаю, что фильтр передает значения указанные в поиске как текст??.. как это исправить подскажите?
Автор: Cryogen2003
Дата сообщения: 16.06.2010 08:55
vladman
По поводу шедулера смотрел исключительно все на демках девок, так что в принципе пока там наработок нет. Что мне требуется уже говорил.

По поводу ПивотГрида тут немного изменилась ситуация - чуть-чуть изменилось задание, так стала сейчас стала просто выгрузка в excel для работы, но в принципе проблема такая же осталась, так как в новом отчете (в ПивотГриде) идет все примерно такое же.

Итак стало быть есть какой-то датасет с данными из базы.
[more=Часть селекта с данными]
SELECT DISTINCT agreetype, regionname, department, department_today,
period, card_period, SUM (total) AS total,
SUM (noncontact_begindate) AS noncontact_begindate,
SUM (noncontact_finishdate) AS noncontact_finishdate,
(CASE
WHEN SUM (total) != 0
THEN ROUND ( ( SUM (noncontact_finishdate)
/ SUM (total)
)
* 100,
2
)
ELSE 0
END
) AS quality_noncontact
FROM
(
......
)
GROUP BY agreetype,
regionname,
department,
department_today,
period,
card_period
ORDER BY agreetype NULLS LAST,
regionname NULLS LAST,
department NULLS LAST,
department_today NULLS LAST,
period NULLS LAST,
card_period NULLS LAST[/more]

[more=Код action, где запускается все обработчики:]
Procedure TfrmRegistry.acRepDynamicNonContactExecute(Sender: TObject);
Var
frmStatus: TfrmStatus;
frmRepeatedContracts: TfrmRepeatedContracts;
RepIVRParams: TRepIVRParams;
RepIVRParamsDebt: TRepIVRParamsDebt;
RepPivotGrid: TRepPivotGrid;
Begin
//Динамика по неконтактным клиентам
frmRepeatedContracts := TfrmRepeatedContracts.Create(Self);
Try
frmRepeatedContracts.EnableExportType(True);
If frmRepeatedContracts.ShowModal = mrOk Then
Begin
RepIVRParams.IVR := EmptyStr;
RepIVRParams.StartDate := frmRepeatedContracts.StartDate;
RepIVRParams.FinishDate := frmRepeatedContracts.FinishDate;
RepIVRParams.Region := Number0;
RepIVRParams.Department := Number0;
RepIVRParams.RepType := frmRepeatedContracts.ExportType;

dmdMain.Worked := True;

RepIVRParamsDebt.RepIVRParams := RepIVRParams;
RepIVRParamsDebt.MT := TkbmMemTable.Create(Self);
Try
RepIVRParamsDebt.MT.Performance := mtpfSmall;

frmStatus := TfrmStatus.Create(Application);
Try
frmStatus.RunStatusThread(dmdMain.RepDynamicNonContact,
@RepIVRParamsDebt, ReportDynamicNonContactConst);
Finally
dmdMain.Worked := False;
FreeAndNil(frmStatus);
End;

If (RepIVRParamsDebt.MT.Active) And
(Not RepIVRParamsDebt.MT.IsEmpty) Then
Begin
Case RepIVRParamsDebt.RepIVRParams.RepType Of
rtDebt:
Begin
RepPivotGrid := TRepPivotGrid.Create;
Try
RepPivotGrid.Caption := ReportDynamicNonContactConst;

RepPivotGrid.AddRowFields(AgreeTypeConst, TypeAgreeStrConst,
Number150);
RepPivotGrid.AddRowFields(DepartmentConst,
DepartmentStrConst1, Number150);
RepPivotGrid.AddRowFields(Department_TodayConst,
Department_TodayStrConst, Number150);
RepPivotGrid.AddRowFields(PeriodConst,
PeriodStrConst, Number150);
RepPivotGrid.AddRowFields(Card_PeriodConst,
Card_PeriodStrConst, Number150);

RepPivotGrid.AddDataFields(TotalConst, TotalStrConst,
Number100);
RepPivotGrid.AddDataFields(NonContact_BeginDateConst,
NonContact_BeginDateStrConst, Number130);
RepPivotGrid.AddDataFields(NonContact_FinishDateConst,
NonContact_FinishDateStrConst, Number130);

RepPivotGrid.AddColumnFields(RegionNameConst,
RegionNameStrConst, Number150);

RepPivotGrid.BeginUpdate;
Try
RepPivotGrid.DataSet := RepIVRParamsDebt.MT;
Finally
RepPivotGrid.EndUpdate;
End;
RepPivotGrid.Execute;
Finally
FreeAndNil(RepPivotGrid);
End;
End;
rtExcel:
Begin
frmStatus := TfrmStatus.Create(Application);
Try
frmStatus.RunStatusThread
(dmdMain_Excel.RepDynamicNonContact, @RepIVRParamsDebt,
ReportDynamicNonContactConst);
Finally
FreeAndNil(frmStatus);
End;
End;
End;
End
Else
MyMessageDlgWarnOk(NoDataForReport);
Finally
FreeAndNil(RepIVRParamsDebt.MT);
End;
End;
Finally
dmdMain.Worked := False;
FreeAndNil(frmRepeatedContracts);
End;
End;
[/more]

Код, где выгрузки в excel и получение TkbmMemTable не привожу, так как ничего там интересного нет.

[more=Класс TRepPivotGrid (написан для некоторой оптимизации кода в программе, так как отчеты часто бывают примерно одни и те же:]
Unit
uPivotGrid;

Interface

Uses
fmRepPivotGrid,
cxCustomPivotGrid,
kbmMemTable;

Type
TRepPivotGrid = Class(TObject)
Private
frmRepPivotGrid: TfrmRepPivotGrid;
FCaption: String;
FDataSet: TkbmMemTable;

Procedure SetCaption(Const Value: String);
Procedure SetDataSet(Const Value: TkbmMemTable);
Public
Constructor Create;
Destructor Destroy; Override;

Procedure BeginUpdate;
Procedure EndUpdate;
Procedure AddFields(FieldName: String; Caption: String; Width: Integer;
Area: TcxPivotGridFieldArea);
Procedure AddRowFields(FieldName: String; Caption: String; Width: Integer);
Procedure AddDataFields(FieldName: String; Caption: String; Width: Integer);
Procedure AddColumnFields(FieldName: String; Caption: String;
Width: Integer);
Procedure SetDateGroupField(FieldName: String);
Procedure Execute;
Published
Property Caption: String Read FCaption Write SetCaption;
Property DataSet: TkbmMemTable Read FDataSet Write SetDataSet;
End;

Implementation

{ TRepPivotGrid }

Uses
SysUtils,
uConsts,
uConsts_Str,
DevExpressCEB,
CEBUtils,
StringUtils,
cxDBPivotGrid;

Procedure TRepPivotGrid.AddColumnFields(FieldName, Caption: String;
Width: Integer);
Begin
AddFields(FieldName, Caption, Width, faColumn);
End;

Procedure TRepPivotGrid.AddDataFields(FieldName, Caption: String;
Width: Integer);
Begin
AddFields(FieldName, Caption, Width, faData);
End;

Procedure TRepPivotGrid.AddFields(FieldName, Caption: String; Width: Integer;
Area: TcxPivotGridFieldArea);
Var
Field: TcxDBPivotGridField;
Begin
Field := frmRepPivotGrid.dbgRepPivotGrid.CreateField As TcxDBPivotGridField;
Field.Visible := True;
Field.DataBinding.FieldName := FieldName;
Field.Area := Area;
Field.Caption := Caption;
Field.Name := frmRepPivotGrid.dbgRepPivotGrid.Name + LowMinusChar +
FieldStrConst + IntToStr(frmRepPivotGrid.dbgRepPivotGrid.FieldCount);
End;

Procedure TRepPivotGrid.AddRowFields(FieldName, Caption: String;
Width: Integer);
Begin
AddFields(FieldName, Caption, Width, faRow);
End;

Procedure TRepPivotGrid.BeginUpdate;
Begin
frmRepPivotGrid.dbgRepPivotGrid.BeginUpdate;
End;

Constructor TRepPivotGrid.Create;
Begin
frmRepPivotGrid := TfrmRepPivotGrid.Create(Nil);
End;

Destructor TRepPivotGrid.Destroy;
Begin
FreeAndNil(frmRepPivotGrid);

Inherited;
End;

Procedure TRepPivotGrid.EndUpdate;
Begin
frmRepPivotGrid.dbgRepPivotGrid.EndUpdate;
End;

Procedure TRepPivotGrid.Execute;
Begin
frmRepPivotGrid.N10.Enabled := frmRepPivotGrid.DateGroupField <> Nil;
frmRepPivotGrid.ShowModal;
End;

Procedure TRepPivotGrid.SetCaption(Const Value: String);
Begin
FCaption := Value;
frmRepPivotGrid.Caption := Value;
End;

Procedure TRepPivotGrid.SetDataSet(Const Value: TkbmMemTable);
Begin
FDataSet := Value;
frmRepPivotGrid.dsRepPivotGrid.DataSet := Value;
End;

Procedure TRepPivotGrid.SetDateGroupField(FieldName: String);
Var
I: Integer;
Index: Integer;
Begin
If IsNotClearText(FieldName) Then
Begin
Index := NumberM1;
For I := Number0 To Pred(frmRepPivotGrid.dbgRepPivotGrid.FieldCount) Do
If QuickSameText((frmRepPivotGrid.dbgRepPivotGrid.Fields[I] As
TcxDBPivotGridField).DataBinding.FieldName, FieldName) Then
Begin
Index := I;
Break;
End;
If Index > NumberM1 Then
Begin
frmRepPivotGrid.DateGroupField :=
(frmRepPivotGrid.dbgRepPivotGrid.Fields[Index] As TcxDBPivotGridField);
frmRepPivotGrid.DateGroupField.GroupInterval := giDate;
End;
End;
End;

End.
[/more]

[more=Код pas для frmRepPivotGrid]
Unit
fmRepPivotGrid;

Interface

Uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
cxGraphics,
cxControls,
cxLookAndFeels,
cxLookAndFeelPainters,
cxClasses,
cxCustomData,
cxStyles,
cxEdit,
dxSkinsCore,
dxSkinBlack,
dxSkinBlue,
dxSkinCaramel,
dxSkinCoffee,
dxSkinDarkRoom,
dxSkinDarkSide,
dxSkinFoggy,
dxSkinGlassOceans,
dxSkiniMaginary,
dxSkinLondonLiquidSky,
dxSkinMcSkin,
dxSkinMoneyTwins,
dxSkinPumpkin,
dxSkinSeven,
dxSkinSharp,
dxSkinSilver,
dxSkinSpringTime,
dxSkinStardust,
dxSkinSummer2008,
dxSkinValentine,
dxSkinXmas2008Blue,
cxCustomPivotGrid,
cxDBPivotGrid,
cxExportPivotGridLink,
DB,
cxGridCustomPopupMenu,
cxGridPopupMenu,
Menus;

Type
TfrmRepPivotGrid = Class(TForm)
dbgRepPivotGrid: TcxDBPivotGrid;
dsRepPivotGrid: TDataSource;
PopupMenu: TPopupMenu;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Excel1: TMenuItem;
HTML1: TMenuItem;
XML1: TMenuItem;
ExcelSaveDialog: TSaveDialog;
HTMLSaveDialog: TSaveDialog;
XMLSaveDialog: TSaveDialog;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
dbgRepPivotGridField1: TcxDBPivotGridField;

Procedure N2Click(Sender: TObject);
Procedure N3Click(Sender: TObject);
Procedure N4Click(Sender: TObject);
Procedure FormCreate(Sender: TObject);
Procedure Excel1Click(Sender: TObject);
Procedure HTML1Click(Sender: TObject);
Procedure XML1Click(Sender: TObject);
Procedure N11Click(Sender: TObject);
Procedure N12Click(Sender: TObject);
Procedure N13Click(Sender: TObject);
Procedure N14Click(Sender: TObject);
Procedure N15Click(Sender: TObject);
Private
FDateGroupField: TcxDBPivotGridField;
Published
Property DateGroupField: TcxDBPivotGridField Read FDateGroupField
Write FDateGroupField;
End;

Implementation

{$R *.dfm}

Uses
dmMain;

Procedure TfrmRepPivotGrid.Excel1Click(Sender: TObject);
Begin
If ExcelSaveDialog.Execute Then
cxExportPivotGridToExcel(ExcelSaveDialog.FileName, dbgRepPivotGrid);
End;

Procedure TfrmRepPivotGrid.FormCreate(Sender: TObject);
Begin
dmdMain.dxComponentPrinter1Link1.Component := dbgRepPivotGrid;

FDateGroupField := Nil;
End;

Procedure TfrmRepPivotGrid.HTML1Click(Sender: TObject);
Begin
If HTMLSaveDialog.Execute Then
cxExportPivotGridToHTML(HTMLSaveDialog.FileName, dbgRepPivotGrid);
End;

Procedure TfrmRepPivotGrid.N11Click(Sender: TObject);
Begin
If FDateGroupField <> Nil Then
FDateGroupField.GroupInterval := giDate;
End;

Procedure TfrmRepPivotGrid.N12Click(Sender: TObject);
Begin
If FDateGroupField <> Nil Then
FDateGroupField.GroupInterval := giDateMonth;
End;

Procedure TfrmRepPivotGrid.N13Click(Sender: TObject);
Begin
If FDateGroupField <> Nil Then
FDateGroupField.GroupInterval := giDateYear;
End;

Procedure TfrmRepPivotGrid.N14Click(Sender: TObject);
Begin
If FDateGroupField <> Nil Then
FDateGroupField.GroupInterval := giDateDay;
End;

Procedure TfrmRepPivotGrid.N15Click(Sender: TObject);
Begin
If FDateGroupField <> Nil Then
FDateGroupField.GroupInterval := giDateDayOfWeek;
End;

Procedure TfrmRepPivotGrid.N2Click(Sender: TObject);
Begin
dmdMain.dxComponentPrinter1.PageSetup(Nil);
End;

Procedure TfrmRepPivotGrid.N3Click(Sender: TObject);
Begin
dmdMain.dxComponentPrinter1.Preview(True, Nil);
End;

Procedure TfrmRepPivotGrid.N4Click(Sender: TObject);
Begin
dmdMain.dxComponentPrinter1.Print(True, Nil, Nil);
End;

Procedure TfrmRepPivotGrid.XML1Click(Sender: TObject);
Begin
If XMLSaveDialog.Execute Then
cxExportPivotGridToXML(XMLSaveDialog.FileName, dbgRepPivotGrid);
End;

End.
[/more]

[more=Код dfm для frmRepPivotGrid]
object frmRepPivotGrid: TfrmRepPivotGrid
Left = 0
Top = 0
ClientHeight = 304
ClientWidth = 643
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
WindowState = wsMaximized
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object dbgRepPivotGrid: TcxDBPivotGrid
Left = 0
Top = 0
Width = 643
Height = 304
Align = alClient
DataSource = dsRepPivotGrid
Groups = <>
LookAndFeel.Kind = lfFlat
OptionsBehavior.CellHints = True
OptionsData.AnsiSort = True
OptionsDataField.IsCaptionAssigned = True
OptionsDataField.Caption = #1044#1072#1085#1085#1099#1077
OptionsView.FilterFields = False
PopupMenu = PopupMenu
TabOrder = 0
object dbgRepPivotGridField1: TcxDBPivotGridField
AreaIndex = 0
Visible = True
end
end
object dsRepPivotGrid: TDataSource
Left = 368
Top = 88
end
object PopupMenu: TPopupMenu
Left = 320
Top = 152
object N2: TMenuItem
Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1072' '#1087#1077#1095#1072#1090#1080
OnClick = N2Click
end
object N3: TMenuItem
Caption = #1055#1088#1077#1076#1087#1088#1086#1089#1084#1086#1090#1088
OnClick = N3Click
end
object N4: TMenuItem
Caption = #1055#1077#1095#1072#1090#1100
OnClick = N4Click
end
object N5: TMenuItem
Caption = '-'
end
object Excel1: TMenuItem
Caption = #1069#1082#1089#1087#1086#1088#1090' '#1074' Excel'
OnClick = Excel1Click
end
object HTML1: TMenuItem
Caption = #1069#1082#1089#1087#1086#1088#1090' '#1074' HTML'
OnClick = HTML1Click
end
object XML1: TMenuItem
Caption = #1069#1082#1089#1087#1086#1088#1090' '#1074' XML'
OnClick = XML1Click
end
object N9: TMenuItem
Caption = '-'
end
object N10: TMenuItem
Caption = #1058#1080#1087' '#1075#1088#1091#1087#1087#1080#1088#1086#1074#1082#1080
object N11: TMenuItem
Caption = #1055#1086' '#1076#1072#1090#1077
OnClick = N11Click
end
object N12: TMenuItem
Caption = #1055#1086' '#1084#1077#1089#1103#1094#1072#1084
OnClick = N12Click
end
object N13: TMenuItem
Caption = #1055#1086' '#1075#1086#1076#1072#1084
OnClick = N13Click
end
object N14: TMenuItem
Caption = #1055#1086' '#1076#1085#1102
OnClick = N14Click
end
object N15: TMenuItem
Caption = #1055#1086' '#1076#1085#1102' '#1085#1077#1076#1077#1083#1080
OnClick = N15Click
end
end
end
object ExcelSaveDialog: TSaveDialog
DefaultExt = '.xls'
Filter = #1060#1072#1081#1083#1099' Excel (*.xls)|*.xls|'#1042#1089#1077' '#1092#1072#1081#1083#1099'|*.*'
Title = #1069#1082#1089#1087#1086#1088#1090' '#1074' Excel'
Left = 496
Top = 152
end
object HTMLSaveDialog: TSaveDialog
DefaultExt = '.html'
Filter = #1060#1072#1081#1083#1099' HTML (*.html)|*.html|'#1042#1089#1077' '#1092#1072#1081#1083#1099'|*.*'
Title = #1069#1082#1089#1087#1086#1088#1090' '#1074' HTML'
Left = 496
Top = 184
end
object XMLSaveDialog: TSaveDialog
DefaultExt = '.xml'
Filter = #1060#1072#1081#1083#1099' XML (*.html)|*.xml|'#1042#1089#1077' '#1092#1072#1081#1083#1099'|*.*'
Title = #1069#1082#1089#1087#1086#1088#1090' '#1074' XML'
Left = 496
Top = 216
end
end
[/more]

Вроде приложил все что только можно.
Итак, стало быть нужно отобразить еще поле quality_noncontact в ПивотГриде (в части Data) и что при различных группировках в Row quality_noncontact было верным.
Как бы, как я понимаю, в принципе надо все это пересчитывать внутри Пивотгрида и само значение из датасета как бы и не совсем нужно, так как по идее легко все можно расчитать все на клиенте, но я не понял как это сделать в пивотгриде.
Автор: afiget
Дата сообщения: 16.06.2010 09:47
[b]antaresSCO[/b]
View.DataController.Options.dcoSortByDisplayText := true;
Автор: vladman
Дата сообщения: 16.06.2010 12:01
antaresSCO
Скриншоты можно положить на любой ресурс хранения изображений и здесь разместить ссылку.
По поводу вашей проблемы - попробуйте обработать событие <YourColumn>.OnGetFilterValues и в нем вызвать AValueList.SortByDisplayText := True;
Автор: X11
Дата сообщения: 16.06.2010 12:32

Цитата:
Или может тебе нужен например EditSyleController?

Дошло. Это разные свойства и компоненты . Мне не нужен cxEditStyleController, мне нужен dxSkinController.

Мне скины нужны.

Тогда вопрос. Почему скины не применяются. Это видно по рисунку.
Автор: linker_2009
Дата сообщения: 16.06.2010 12:52
[b]X11[/b]
я вам уже писал, что нужен cxLookAndFeelController на главной форме. + у вас на скрине видно что у компонента не выставлено свойство LookAndFeel.SkinName, выставите вручную(вы кинули компонент dxSkinController уже на форму с компонентами, бывает что не применяется). Есть ещё один глюк, если показывать диалоговую форму до показа главной формы скины не прогружаються, приходиться кодом ещё раз их активировать.

[b][s]Добавлено:[/s][/b]
[b]antaresSCO[/b]
[b]liron111[/b]
Пожалуйста скройте свой код под тегом More, как сделать посмотрите чуть выше в посте [b]Cryogen2003[/b], нажав "Редактировать" в заголовке поста
Автор: X11
Дата сообщения: 16.06.2010 13:45

Цитата:
LookAndFeel.SkinName, выставите вручную

Эмммм мне для всех компонентов всего приложения так делать? Зачем тогда скинконтроллер?


Цитата:
я вам уже писал, что нужен cxLookAndFeelController на главной форме

Я его не использовал раньше и на главной форме приложения у компонентов применяется выбранный пользователем скин ко всем компонентам.
Я говорю о том, что на др. форме не применяется скин к cx<Комопнентам>, хотя сама форма окрашивается.


Цитата:
Есть ещё один глюк, если показывать диалоговую форму до показа главной формы скины не прогружаються, приходиться кодом ещё раз их активировать.

Я создаю и показываю вторую форму уже после.
Автор: linker_2009
Дата сообщения: 16.06.2010 14:17
[b]X11[/b]
[q]Эмммм мне для всех компонентов всего приложения так делать? Зачем тогда скинконтроллер?[/q]
Попробуй попреключать скины туду сюда в Desingtime, незнаю что еще посоветовать. Скины у девок глючные это факт.
Кстати посмотри еще опций "главное меню дельфи"->Project->Modify Skin Options
[q]Я его не использовал раньше и на главной форме приложения у компонентов применяется выбранный пользователем скин ко всем компонентам.[/q]
У меня из-за его отсутствия в одних приложениях скины не прогружались, а в других нормально. Я уже по привычке сразу после бара кладу dxSkinController и cxLookAndFeelController.
Автор: volser
Дата сообщения: 16.06.2010 14:54
X11
Нужно убрать галочки в AssignedValue.
Автор: X11
Дата сообщения: 16.06.2010 15:43

Цитата:
X11
Нужно убрать галочки в AssignedValue.

Именно! ,
Спасибо.
Спасибо, всем ответившим.
Автор: Petrenuk
Дата сообщения: 16.06.2010 16:47
Добрый день.
Обращаюсь с проблемой, которая наверняка обсуждалась, но в поиске не нашел, а 43 страницы форума просматривать долго)

При работе с обычной таблицей TcxGrid возникает необходимость довольно часто обновлять ее содержимое (некоторые ячейки несколько раз в секунду). При этом, если пользоваться BeginUpdate и EndUpdate, заголовки всех столбцов при каждом обновлении "подрагивают", значит тоже перерисовываются. Опытные программисты, подскажите, как поступить, чтобы обновлялся текст только ячеек (или только одной ячейки), и не перерисовывались заголовки столбцов. Код такой:

Код:
procedure TForm3.FormRefresh(Sender: TObject);
var
i,j: Integer;
Row: TcxCustomGridRow;
begin
if Assigned(TranSupplier) and (ColCount > 0) then
begin
TableView.BeginUpdate();

LastVisRow := CalculateLastVisRow();
CalculateVisibleCols(FirstVisCol,LastVisCol);
for i := FirstVisRow to LastVisRow - 1 do
begin
Row := TableView.ViewData.Rows[i];

for j := FirstVisCol to LastVisCol - 1 do
begin
Row.Values[j] := TranSupplier.GetCellText1(j,i);
end;
end;
TableView.EndUpdate();
end;
end;
Автор: marser
Дата сообщения: 16.06.2010 20:52
Petrenuk
Вместо TableView.BeginUpdate, TableView.EndUpdate попробуйте
TableView.DataController.BeginUpdate, TableView.DataController.EndUpdate
Автор: antaresSCO
Дата сообщения: 16.06.2010 22:22
vladman

Цитата:
AValueList.SortByDisplayText := True;

Видимого результата не дал
Суть проблемы Вы явно уловили ... может ещё идеи есть?

Добавлено:
linker_2009
Лет пяток назад у меня проскакивали такие идеи, но ввиду активной юзаимости (редактируемости) основной таблицы у меня возникали проблемы со своевременным обновлением "притянутых" значений. Точно не помню из-за чего, но этот способ я отбросил.
Спасибо за вариант и за подсказку по оформлению на форуме - к сожалению разработчики не потрудились явно указать доступные для использования тэги как это делается на неспартанских форумах - панелькой с пымпочками
Автор: korstin
Дата сообщения: 17.06.2010 07:10
TdxDBTreeView, необходимо найти и сфокусироваться на нужном узле.
Locate - не помогает (и это понятно), DBTreeNodes.GetTreeNode(Ключевое_поле) - возвращает Nil
Автор: marser
Дата сообщения: 17.06.2010 07:47
korstin

Цитата:
Locate - не помогает (и это понятно)

Это непонятно. OptionsData.SyncMode := ?
Автор: korstin
Дата сообщения: 17.06.2010 08:26

Цитата:
Это непонятно. OptionsData.SyncMode := ?

TdxDBTreeView
Автор: crazypiggy
Дата сообщения: 17.06.2010 10:06
У кого нибудь есть пример работы с dxSpellChecker? Если можно дайте ссылку.
Автор: Petrenuk
Дата сообщения: 17.06.2010 10:19

Цитата:
Вместо TableView.BeginUpdate, TableView.EndUpdate попробуйте
TableView.DataController.BeginUpdate, TableView.DataController.EndUpdate


я пробовал это, пробовал также


Код:
TableView.DataController.BeginUpdateFields();
if (ACol >= FirstVisCol) and (ACol <= LastVisCol) and
(ARow >= FirstVisRow) and (ARow <= LastVisRow)
then
TableView.ViewData.Rows[ARow].Values[ACol] := TranSupplier.GetCellText1(ACol,ARow);

TableView.DataController.EndUpdateFields();
Автор: onyxhall
Дата сообщения: 18.06.2010 19:18
Подскажите пожалуйста. Можно ли в PivotGrid сделать так, чтобы фильтры (т.е. их кнопки) в Filter Header Area выводились в несколько строк, а не в одну длинную?
Автор: indapublic
Дата сообщения: 19.06.2010 12:06

Цитата:
TdxDBTreeView
, отвечу сам себе: раскрывать приходится по всему дереву, начиная с рутового узла.
Автор: linker_2009
Дата сообщения: 19.06.2010 13:52
Petrenuk
а надо ли так часто обновлять? сколько раз в секунду ты обновляешь грид?


Цитата:
И еще, если кто-нибудь знает, как мне вставить картинку типа TBitmap в ячейку грида?

у колонки свойство Properties ставишт в Image. как имено загрузить
было уже в этом топике, например Ticon http://forum.ru-board.com/topic.cgi?forum=33&topic=10884&start=440#18
и чyть далее было с jpg
Автор: bilov
Дата сообщения: 20.06.2010 22:23
Скажите пожайлусто есть ли в DevExpress (компонент cxGrid) возможность запоминать измененные в в runtime расположение и ширину столбцов. Я где-то слышал что в DevExpress так можно. Как можно это сделать, и если это не так просто то можно примерчик или ссылочку где можно об этом почитать. Заранее благодарен
Автор: vladman
Дата сообщения: 21.06.2010 01:16
bilov

Цитата:
Скажите пожайлусто есть ли в DevExpress (компонент cxGrid) возможность запоминать измененные в в runtime расположение и ширину столбцов

Есть такая возможность, да и компонент есть. Удобней пользоваться возможностью. )
О возможности можно поискать в справке по словам TcxCustomGridView.StoreToRegistry, ...StoreToIniFile, ...StoreToStorage, ...StoreToStream. О компоненте - TcxPropertiesStore.
Cryogen2003
О ваших вопросах не забыл. Не судите строго что допытывался у вас разъяснений и ничего вразумительного не предложил в ответ. Попробую оправдаться - в последнее время что-то уж совсем со временем стало туго. ). Но, думаю, в скором смогу найти пару часов на ваши вопросы. Как будем результат - вы его здесь сразу же увидите.
Автор: Cryogen2003
Дата сообщения: 21.06.2010 08:42
vladman
Большое спасибо. Буду очень ждать

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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