• Delphi CxGrid 汇总(3)


    列  
    解决:
          <aColumn>.GroupIndex   :=   -1;  
          <aColumn>.Visible   :=   True;
    ****************************************************************************
    39 保存修改到数据库
    解决:
    procedure   <aForm>.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
    begin  
    if   (<aGrid>.FocusedView <> nil)
    and   (<aGrid>.FocusedView.DataController.EditState <> []) then  
              <aGrid>.FocusedView.DataController.Post;  
    end;
    ****************************************************************************
    40 设置内置右键菜单
    解决:
    内置右键菜单包括二个菜单:cxGridStdHeaderMenu,   TcxGridStdFooterMenu  

    [delphi] view plaincopy
     
    uses   cxGridStdPopupMenu;    
         
    procedure   TForm1.cxGridPopupMenu1Popup(ASenderMenu:   TComponent;    
          AHitTest:   TcxCustomGridHitTest;   X,   Y:   Integer;   var   AllowPopup:   Boolean);    
    begin    
          if   ASenderMenu   is   TcxGridStdHeaderMenu   then    
              TcxGridStdHeaderMenu(ASenderMenu).OnPopup   :=   StdHeaderMenuPopup;    
    end;    
         
    procedure   TForm1.StdHeaderMenuPopup(Sender:   TObject);    
    var    
          I:   Integer;    
    begin    
          with   TcxGridStdHeaderMenu(Sender).Items   do    
              for   I   :=   0   to   Count   -   1   do    
                  if   Items[I].Caption   =   'Group   By   Box'   then    
                  begin    
                      Items[I].Enabled   :=   False;    
                      System.Break;    
                  end    
    end;  

    ****************************************************************************
    41 得到选中记录的值
    解决:

    [delphi] view plaincopy
     
    1. 1)   View.DataController.DataModeController.GridMode   =   False时    
           
            RecIdx   :=   View.Controller.SelectedRecords[i].RecordIndex;    
            ColIdx   :=   View.DataController.GetItemByFieldName(AFieldName).Index;    
            OutputVal   :=   View.DataController.Values[RecIdx,   ColIdx];    
           
            //RecID   :=   View.DataController.GetRecordId(RecIdx);    
            //OutputVal   :=   ADataSet.Lookup(View.DataController.KeyFieldNames,   RecID,   AFieldName);    
           
      2)   View.DataController.DataModeController.GridMode   =   True时    
            Bkm   :=   View.DataController.GetSelectedBookmark(ASelectedRecordIndex);    
            if   ADataSet.BookmarkValid(TBookmark(Bkm))   then    
            begin    
                ADataSet.Bookmark   :=   TBookmark(Bkm);    
                OutputVal   :=   ADataSet.FieldByName(AFieldName).Value;    
            end;    
           
            View.BeginUpdate;    
            View.DataController.BeginLocate;    
            try    
                //   make   changes   here…    
            finally    
                View.DataController.EndLocate;    
                View.EndUpdate;    
            end;  
      **********************************************
      ******************************

    42 在GridMode禁用内置的右键Footer菜单
    解决:
    uses   cxGridStdPopupMenu;  
       
    procedure   cxGridPopupMenuOnPopup(...)  
    begin  
          if   (ASenderMenu   is   TcxGridStdFooterMenu)   and  
                  <GridView>.DataController.DataModeController.GridMode   then  
              AllowPopup   :=   False;  
    end;
    ****************************************************************************
    43 主从表任何时候只能展开一个组
    解决:

    [delphi] view plaincopy
     
    1. procedure   TForm1.ADetailDataControllerCollapsin(  ADataController:  TcxCustomDataController;    
        
      ARecordIndex:   Integer;  var   AAllow:   Boolean);    
      var    
            I:   Integer;    
            C:   Integer;    
      begin    
            AAllow   :=   False;    
            C   :=   0;    
            for   I   :=   0   to   ADataController.RecordCount   -   1   do    
            begin    
                if   ADataController.GetDetailExpanding(I)   then    
                    Inc(C);    
                if   C   >   1   then    
                    AAllow   :=   True;    
              end;    
      end;    
           
      procedure   TForm1.ADetailDataControllerExpanding(    
            ADataController:   TcxCustomDataController;   ARecordIndex:   Integer;    
            var   AAllow:   Boolean);    
      begin    
            ADataController.CollapseDetails;    
      end;    
           
      procedure   TForm1.FormCreate(Sender:   TObject);    
      begin        cxGrid1DBTableView1.DataController.OnDetailExpanding:=ADetailDataControllerExpanding;         cxGrid1DBTableView1.DataController.OnDetailCollapsing:=ADetailDataControllerCollapsing;    
      end;  
      ****************************************************************************  
      44 动态创建层次(Level)和视图(View)  
      解决:  
      var        
            Grid:   TcxGrid;        
            Level:   TcxGridLevel;        
            View:   TcxGridDBTableView;        
      begin    
            //   Creates   a   Grid   instance    
            Grid   :=   TcxGrid.Create(SomeOwner);        
            Grid.Parent   :=   SomeParent;        
            //   Creates   a   Level    
            Level   :=   Grid.Levels.Add;        
            Level.Name   :=   'SomeLevelName';    
            //   Creates   a   View    
            View   :=   Grid.CreateView(TcxGridDBTableView)   as   TcxGridDBTableView;        
            View.Name   :=   'SomeViewName';    
            //   …   and   binds   it   to   the   Level    
            Level.GridView   :=   View;        
            //   Hooks   up   the   View   to   the   data    
            View.DataController.DataSource   :=   SomeDataSource;        
            //   …   and   creates   all   columns    
            View.DataController.CreateAllItems;        
      end;  

    ****************************************************************************
    45 获得Group   Footer合计行对应的记录
    解决:

    [delphi] view plaincopy
     
    1. procedure   TForm1.cxGrid1DBTableView1CustomDrawFooterCell(    
            Sender:   TcxGridTableView;   ACanvas:   TcxCanvas;    
            AViewInfo:   TcxGridColumnHeaderViewInfo;   var   ADone:   Boolean);    
      var    
            ALevel,   ADataGroupIndex:   Integer;    
            AGridRecord,   AGroupRecord:   TcxCustomGridRecord;    
      begin    
            if   AViewInfo   is   TcxGridRowFooterCellViewInfo   and    //   Row   footer    
                  (TcxGridDBColumn(AViewInfo.Column).DataBinding.FieldName   =   'Area')   then     //   Area   column    
         begin    
              AGridRecord:=   TcxGridRowFooterCellViewInfo(AViewInfo).GridRecord;    
              ALevel:= TcxGridRowFooterCellViewInfo(AViewInfo).Container.GroupLevel;    
      ADataGroupIndex:=Sender.DataController.Groups.DataGroupIndexByRowIndex[AGridRecord.Index];    
               if   ADataGroupIndex   <>   -1   then    
               begin    
                  AGroupRecord   :=   AGridRecord;    
                  while   AGroupRecord.Level   <>   ALevel   do    
                  AGroupRecord   :=   AGroupRecord.ParentRecord;    
                  AViewInfo.Text   :=   AGroupRecord.DisplayTexts[0];    
               end;    
           end;    
      end;  
      **************************************
      **************************************

    46 访问过滤之后的记录
    解决:
    var  
          I:   Integer;  
    begin  
          Memo1.Lines.Clear;  
          with   cxGrid1DBTableView1.DataController   do  
              for   I   :=   0   to   FilteredRecordCount   -   1   do  
                  Memo1.Lines.Add(DisplayTexts[FilteredRecordIndex[I],   0]);  
    end;

    ****************************************************************************
    47 获得单元的Font
    解决:
    cxGrid1DBTableView1.ViewInfo.RecordsViewInfo.Items[1].GetCellViewInfoByItem(  
          cxGrid1DBTableView1Company).EditViewInfo.Font;
    ****************************************************************************
    48 根据Level名称找到Level对象
    解决:

    [delphi] view plaincopy
     
    1. function   GetLevelByName(AGrid:   TcxGrid;   ALevelName:   string):   TcxGridLevel;    
           
            function   LoopThroughLevels(ALevel:   TcxGridLevel;   ALevelName:   string):   TcxGridLevel;    
            var    
                I:   Integer;    
            begin    
                Result   :=   nil;    
                for   I   :=   0   to   ALevel.Count   -   1   do    
                begin    
                    if   ALevel[I].Name   =   ALevelName   then    
                    begin    
                        Result   :=   ALevel[I];    
                        Exit;    
                    end;    
                    if   ALevel[I].Count   >   0   then    
                    begin    
                        Result   :=   LoopThroughLevels(ALevel[I],   ALevelName);    
                        if   Result   <>   nil   then    
                            Exit;    
                    end;    
                end;    
            end;    
           
      var    
            I:   Integer;    
      begin    
            Result   :=   nil;    
            for   I   :=   0   to   AGrid.Levels.Count   -   1   do    
            begin    
                if   AGrid.Levels[I].Name   =   ALevelName   then    
                begin    
                    Result   :=   AGrid.Levels[I];    
                    Exit;    
                end;    
                if   AGrid.Levels[I].Count   >   0   then    
                begin    
                    Result   :=   LoopThroughLevels(AGrid.Levels[I],   ALevelName);    
                    if   Result   <>   nil   then    
                        Exit;    
                end;    
            end;    
      end;  

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

     49 指定Filter   Builder打开/保存过滤文件的默认路径
    解决:
    uses  
          ...,   cxFilterControlDialog;  
       
    procedure   TForm.GridView1FilterControlDialogShow(  
          Sender:   TObject);  
    begin  
          TfmFilterControlDialog(Sender).OpenDialog.InitialDir   :=   'D:/'  
    end;

  • 相关阅读:
    注解
    idea 快速生成返回值快捷方式
    异常处理
    finally 关键字
    博客园美化
    winform中webBrowser模拟网页操作中遇到的问题
    使用NPOI 2.1.1读取EXCEL2003/2007返回DataTable
    使用事务和SqlBulkCopy批量插入数据
    Java String比较
    Java 实例级别的锁和类级别的锁
  • 原文地址:https://www.cnblogs.com/westsoft/p/8504040.html
Copyright © 2020-2023  润新知