zoukankan      html  css  js  c++  java
  • cxGrid使用汇总(一)

    1. 去掉cxGrid中台头的Box
    解决:在tableview1的optionsview的groupbybox=false;

     

    2.统计功能
    解决:(1) tableview
    1. tableview1的optionsviewfooter=ture
    2.然后在cxGRid1的customize..中的summary 的footer.add需要合计的列kind= skSum
    在Footer的第一列显示[合计:]  
    加一个Summary项,Column设为Grid的第一列,Kind设为skNone  
    在该Summary项的OnGetText事件中,输入:  
    procedure   TFormExpense.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 下add加入需要合计的字段,column下显示fieldname 为统计字段,format为格式,kind为统计方法,position 为位子 spfooter 在分组的下面,spgroup 在分组的上面
    或用cxGridPopupMenu1,在运行時可对任意数字类型列求和,方法是只需设置cxGridPopupMenu1的属性Grid为cxGrid1DBTableView1的cxGrid,

    ***************************************************************************** 

    3.去掉cxgrid 中的过滤下拉箭头
    解决: 选择tableview1.optionscustomize.columnfiltering=fasle;

    **************************************************************************** 

    4.让“Drag a column here to group by that column”不显示
       解决:在cxGrid1DBTableView1->optionsview->groupbybox:=false即可

    ****************************************************************************

    5.GroupPanel上面的英文[Drag a column header to group by that column]怎么可以改成中文
    解决:最简单的方法是 TcxGridTableView.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:填好主表的keyfieldnames
    2:填好从表的keyfieldnames
    3:填好从表的 detaikeyfieldNames与masterkeyfieldnames
    4: 从表的数据源一定要按与主表关联的字段排序
    注:其它地方设置了主从表结构那样就显示不出来,比如设置了从表的Table或者Query的mastersource和
    asterfield就会不能显示数据!如果是两个cxGrid的主从关系,这样设置就很OK了。

    ****************************************************************************

    7.类似PageControl显示

    解决:增加一个Level,将cxGrid1->RootLevelOptions->DetailTabsPosition设为dtpTop,然后相应的设置cxGrid1Level1,和cxGrid1Level2的Caption值。

    ****************************************************************************

    8.如何设定左边几列,不能滚动

    解决:使用DB Banded Table才可以实现,在cxGrid1DBBandedTableView里建立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.怎样将cxGrid里的数据导入到EXCEL,HTML,XML和TEXT

    解决: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. 如何使满足条件的数据显示不同的颜色?

    12. 如何使满足条件的数据显示不同的颜色?
    
    解决:
    
    [delphi] view plaincopy
    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;  
    这里cxGrid1DBBandedTableView1Lengthcm.Index小于81时就显示黄色
    
    ****************************************************************************
    13. 如何从外边的TXT文件导入到cxGrid?
    
    解决:
    
    [delphi] view plaincopy
    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;  
  • 相关阅读:
    1026 Table Tennis (30)
    1029 Median
    1025 PAT Ranking (25)
    1017 Queueing at Bank (25)
    1014 Waiting in Line (30)
    1057 Stack (30)
    1010 Radix (25)
    1008 Elevator (20)
    字母大小写转换
    Nmap的基础知识
  • 原文地址:https://www.cnblogs.com/m0488/p/9555614.html
Copyright © 2011-2022 走看看