Delphi CxGrid 요약 (1)

10199 단어 Delphicxgrid
delphi에서 cxGrid 사용 요약 (1) (회전)
1. cxGrid에서 데스크톱의 Box 해결을 제거한다:tableview1의 ptionsview의 그룹bybox=false;
 
2. 통계 기능 해결: (1) 테이블 뷰 1.tableview1의 옵션sviewfooter=ture 2.그리고 cxGrid1의customize.중summary의footer.dd 합계가 필요한 열kind=skSum은 Footer의 첫 열에 [합계:] Summary 항목을 추가하고 Column은 Grid의 첫 번째 열을, Kind는 skNone을 skNone으로 설정합니다. 이 Summary 항목의 OnGetText 이벤트에 입력하십시오: procedure TForm Expense.tvExpenseTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems2GetText(        Sender:   TcxDataSummaryItem;   const   AValue:   Variant;   AIsFooter:   Boolean;        var   AText:   String);begin Atext: ='합계:';  end;
(2) 조건별 요약: TableView의 DataController->Summary->FooterSummary->OnSummary 이벤트에서 입력:procedure TFormExpense.tvExpenseDataControllerSummaryFooterSummaryItemsSummary(        ASender:   TcxDataSummaryItems;   Arguments:   TcxSummaryEventArguments;        var   OutArguments:   TcxSummaryEventOutArguments);begin//필드 이름 TcxDBDataSummaryItem (Arguments.SummaryItem) 을 얻습니다.FieldName;if(Asender.DataController.Values[Arguments.RecordIndex, tvExpenseLevel.Index]>1)/Level열=1의 값 and(TcxDBDataSummaryItem(Arguments.SummaryItem)만 통계합니다.Kind   =   skSum)   then            OutArguments.Value   :=   0;//Level > 1의 통계 값이 0 end로 설정됩니다.
OptionView의 속성 GroupFooters는 gfAlwaysVisible로 설정하고 화해할 열을 설정합니다.
summary에 있습니다.default for Groups에서dd는 합계가 필요한 필드를 추가하고,column에서는fieldname은 통계 필드,format는 형식,kind는 통계 방법,position은 위치 spfooter는 그룹 아래에 있고,spgroup는 그룹 위에 있거나 cxGridPopupMenu1을 사용하며, 실행할 때 임의의 숫자 형식에 대해 화합을 구할 수 있습니다. 방법은 cxGridPopupmMenu1의 속성 Grid를 cxGrid1DBble View1의 Table View1로 설정하는 것입니다.
***************************************************************************** 
3. cxgrid의 필터를 제거하고 아래쪽 화살표를 해결합니다:tableview를 선택하십시오.optionscustomize.columnfiltering=fasle;
**************************************************************************** 
4. "Drag a column here to group by that column"에 해결 사항을 표시하지 않기: cxGrid1 DBTable View1->optionsview->groupbybox:=false
****************************************************************************
5. GroupPanel 위의 영어 [Drag a column header to group by that column] 어떻게 중국어로 해결할 수 있습니까? 가장 간단한 방법은 Tcx Grid Table View입니다.OnCustomDrawPartBackground 또는 OnCustomDrawGroupCell:
procedure TForm1.cxGrid1DBTableView1CustomDrawPartBackground(Sender: TcxGridTableView; ACanvas: TcxCanvas;AViewInfo: TcxCustomGridCellViewInfo; var ADone: Boolean); begin   AViewInfo.Text:='GroupBox의 디스플레이 내용을 동적으로 설정합니다'.  ACanvas.FillRect(AViewInfo.Bounds); end; 주: 중국어로 바꾼 후 필드를 중국어로 드래그하면 표시됩니까? 빈 값을 설정하는 것이 좋습니다
****************************************************************************
6. 어떻게 다음과 같은 기능을 실현할 것인가: +재무부+원자재창고+완제품창고+프레스 작업장+소프트웨어개발부 이것은 부서의 명칭으로 플러스 번호를 누르면 본 부서의 인원 상황을 나타낼 수 있다.
해결: 사실 이것은 주종표 관계입니다. 1: 주표를 작성한 키필드names2: 주종표를 작성한 키필드names3: 시계의detaikeyfieldNames와 Masterkeyfieldnames4: 시계의 데이터 원본은 반드시 주표와 관련된 필드에 따라 정렬해야 합니다. 주종표 구조를 설정하면 표시되지 않습니다.예를 들어 테이블의 테이블이나Query의 마스터소스와 asterfield를 설정하면 데이터를 표시할 수 없습니다!만약 두 개의 cxGrid의 주종 관계라면, 이렇게 설정하면 매우 OK된다.
****************************************************************************
7. PageControl과 비슷하게 표시
해결: Level을 추가하여 cxGrid1->RootLevelOptions->DetailTabsPosition을 dtpTop으로 설정한 다음에 해당하는 설정인 cxGrid1Level1과 cxGrid1Level2의Caption값을 설정합니다.
****************************************************************************
8. 왼쪽 열을 어떻게 설정하는지 스크롤할 수 없습니다
해결: DB Banded Table를 사용해야 실현할 수 있습니다. cx Grid1 DB Banded TableView에Band0을 만들고Band1 Band0의Fixed=tfleft Band1의Fixed=tfnone에 잠길 필드를 설정하는BandIndex=0, 나머지는 1이면 OK입니다.
*******************************************************************************
9. EXCEL과 같은 현재 칸=G14+G15+G16과 같은 기능을 어떻게 실현하는가: 간단한 예를 들면 label1.Caption := cxGrid1DBTableView1.DataController.Value[2,3]+cxGrid1DBTableView2.DataController.Values[1, 1]+cxGrid1DBTableView3.DataController.Values[1, 1]; 따라서 서로 다른 cxGrid1DBTableView의 데이터는 모두 현재 칸에 줄 수 있습니다. 이렇게 하면 EXCEL의 현재 칸 =G14+G15+G16과 유사한 기능을 할 수 있습니다.
10. cxGrid1DBBandedTableView1 메뉴에 있는 Edit Layout을 우클릭하면 어떤 용도로 사용하고, 어떻게 사용합니까?
해결: 필드를 드래그할 수 있고, 나란히 있는 필드는 차원감(층층)으로 드래그할 수 있으며, 드래그할 때 화살표를 표시할 수 있다. 즉, 한 필드를 드래그해서 놓을 수 있다.
****************************************************************************
11. EXCEL, HTML, XML, TEXT에 cxGrid의 데이터를 가져오는 방법
해결: uses cxExportGrid4Link,( cxExportGrid6Link)
procedure TForm1.Button1Click(Sender: TObject); begin    ExportGrid4ToEXCEL('d:/wang.xsl',cxGrid1,True,True);    ExportGrid4ToTEXT('d:/wang.txt',cxGrid1,True,True);    ExportGrid4ToXML('d:/wang.xml',cxGrid1,True,True);    ExportGrid4ToHTML('d:/wang.html',cxGrid1,True,True); end;
**************************************************************************** 12. 어떻게 해야 조건에 맞는 데이터로 하여금 서로 다른 색을 나타낼 수 있습니까?
해결 방법:
var
AYellowStyle: TcxStyle;

procedure TForm1.FormCreate(Sender: TObject);
begin
//   
   AYellowStyle := TcxStyle.Create(Self);
  AYellowStyle.Color := $0080FFFF;
  AYellowStyle.TextColor := clMaroon;
end;

procedure TForm1.cxGrid1DBBandedTableView1StylesGetContentStyle(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
begin
if ARecord.Values[cxGrid1DBBandedTableView1Lengthcm.Index] < 81 then
  AStyle := AYellowStyle;
end;

여기 cxGrid1DBBBandedTableView1Lengthcm.Index가 81보다 작으면 노란색 표시
**************************************************************************** 13. 외부 TXT 파일에서 cxGrid로 가져오는 방법은 무엇입니까?
해결 방법:
procedure CustomizeColumns;
procedure LoadData;

procedure TForm1.CustomizeColumns;
const
cDistance = 1;
cRadius = 5;
cPeriod = 4;
cPstring = 0;
var
I: Integer;
begin
DecimalSeparator := '.';
with cxGrid1TableView2 do
for I := 0 to ColumnCount - 1 do
if I in [cDistance, cRadius] then
Columns[I].DataBinding.ValueTypeClass := TcxIntegerValueType//1,5  Integer
else
if I in [cPstring,cPeriod] then
Columns[I].DataBinding.ValueTypeClass := TcxStringValueType//0,4  String
else
Columns[I].DataBinding.ValueTypeClass := TcxFloatValueType;//   Float
end;

procedure TForm1.LoadData;
const
AFileName = '     .txt';
AHeaderLineCount = 2;

var
ARecords, AValues: TStringList;
I: Integer;

procedure InitRecord(const Str: string);
var
J: Integer;
V: Variant;
begin
AValues.CommaText := Str;
for J := 0 to AValues.Count - 1 do
if AValues.Strings[J] <> '-' then
begin
V := AValues.Strings[J];
if not VarIsNull(V) then
cxGrid1TableView2.DataController.Values[I, J] := V;
end;
end;

begin
if not FileExists(AFileName) then
raise Exception.Create('Data file not found');

ARecords := TStringList.Create;
AValues := TStringList.Create;

with ARecords do
try
LoadFromFile(AFileName);
cxGrid1TableView2.BeginUpdate;
cxGrid1TableView2.DataController.RecordCount := Count - AHeaderLineCount;
for I := 0 to Count - (AHeaderLineCount + 1) do
InitRecord(Strings[I + AHeaderLineCount]);
finally
cxGrid1TableView2.EndUpdate;
ARecords.Free;
AValues.Free;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
CustomizeColumns;
LoadData_Zcfz;
end;

****************************************************************************
14         ?
  :
var
AFirstColumnStyle: TcxStyle;

procedure TForm1.FormCreate(Sender: TObject);
begin
//   
AFirstColumnStyle := TcxStyle.Create(Self);
AFirstColumnStyle.Color := clAqua;
AFirstColumnStyle.TextColor := clBlue;
cxGrid1TableView1.Columns[1].Styles.Content := AFirstColumnStyle;
end;
****************************************************************************
15 Set as default   ?
  :Set as default                  ,  :
       ,  cxGrid1DBBandedTableView1->OptionsCustomize-> ColumnFiltering   False。(                 )  cxGrid1DBBandedTableView1->OptionsView- >Navigator    True。    cxGrid1DBBandedTableView1,           Set as default。
OK,          cxGrid1DBBandedTableView1            。              ,  Set as default   !

****************************************************************************
16.         ,           ?
  :
var
FTrackItem: TcxCustomGridTableItem;
FTrackRec: TcxCustomGridRecord;

procedure TForm1.cxGrid1DBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
if (AViewInfo.GridRecord = FTrackRec) and (AViewInfo.Item = FTrackItem) then
begin
ACanvas.Font.Color := clred; //    
ACanvas.Font.Style := [fsUnderline];//    
end;
end;

procedure TForm1.cxGrid1DBTableView1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
AHitTest: TcxCustomGridHitTest;
ATrackItem: TcxCustomGridTableItem;
ATrackRec: TcxCustomGridRecord;
begin
ATrackItem := FTrackItem;
ATrackRec := FTrackRec;

AHitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);
if AHitTest is TcxGridRecordCellHitTest then
begin
FTrackItem := TcxGridRecordCellHitTest(AHitTest).Item;
FTrackRec := TcxGridRecordCellHitTest(AHitTest).GridRecord;
end
else
begin
FTrackItem := nil;
FTrackRec := nil;
end;

if (ATrackItem <> FTrackItem) or (ATrackRec <> FTrackRec) then
begin
// Invalidate old cell
if ATrackRec <> nil then
ATrackRec.Invalidate(ATrackItem);
// Invalidate new cell
if FTrackRec <> nil then
FTrackRec.Invalidate(FTrackItem);
end;
end;

좋은 웹페이지 즐겨찾기