ehlib的使用

ehlib的使用

 2003-12-5 15:22:29     使用 TDBSumList 组件

   还记得以前有朋友问过这样一个问题:在 DBGrid 下如何像 Excel 一样能够做统计计算,实话说,使用 DBGrid 来做的话着实不易,不过现在有了这个咚咚,相信会简单些。以下是摘录的一些使用上的说明:

【TDBSumList说明】 
   你可以使用TDBSumList在可视动态变化数据集中进行记录统计。在你想查看的数据集中设置相关的数据字段,然后写 SumListChanged 事件来指定在TDBSumList发生改变后所要做的操作。TDBSumList 的 SumCollection 属性上一个 TDBSum 对象容器。每个 TDBSum 对象是一个可以指定集合值的元件。 FieldName 和 GroupOperation 决定了集合值的类型,SumValue 控制当前的集合值。

   TDBSumList 被埋藏于 DBGridEh 组件中,因此所的下面有关TDBGridEh.SumList 的说明与TDBGirdEh的TDBGridEh.SumList 属性的说明是一样的。

【如何工作以及为什么有时SumList的集合值计算不正确?】
   你知道 data-aware 控件与数据集是通过 TDataLink 对象相连接的。 TDataLink 不允许快速重新计算集合值。例如,当从数据集中删除记录时,数据集发送deDataSetChange事件给所有的TDataLink对象,在当前局部过滤发生改变时,同样的事件也被发送了。因此当 TDataLink 接收到该事件时,它不得不在所有的数据集中重新计算集合值,甚至于仅从数据集中删除一条记录。在激活后, TDBSumList 重载了数据集的下列事件: OnAfterEdit, OnAfterInsert, OnAfterOpen, OnAfterPost, OnAfterScroll, OnBeforeDelete, OnAfterClose。这种方法避免了在所有的数据集中它。在不需要它时,又会出现其它的问题,比如: T 运行时指定这些事件。在指定上述事件之一以前,关闭 SumList。
   在下面的情形下,SumList 发出存取错误信息。 SumList 试着向数据集返回事件,但数据集数据并未被删除。在SumList(或网格)以及数据集放置在不同的窗体(数据模块)这种情况下,可以显示数据。在这种情况下,试着在从数据集或数据模块中数据集数据被删除时关闭SumList。
   如果你使用SetRange或ApplyRange事件,SumList 将不能跟踪数据集中发生的变化。但可以调用 SumList.RecalAll 方法。
   在非BDE数据集的主/明细表中,SumList 不能跟踪数据变化。在主数据集激活状态数据集发生变化后,调用 SumList.RecalAll 方法。
   在任何其它情况下,如果你发现了其它SumList的计算值不正确,你都可以调用 RecalAll 方法。  

 
 2003-12-5 15:24:54     如何使用 Ehlib 实现自动排序

   在 Ehlib 的 DataService 文件夹下提供了一些可以使数据集实现自动排序的文件。TDBGridEh 使用这些文件中的相关对象可以实现当排序标记发生变化时实现自动排序。 

   如果你改变了数据网格及标题的排序标记而没有书写 OnSortMarkingChanged 事件,数据网格将尝试自动进行数据排序。DBGridEhDataService 尝试通过 GetDatasetFeaturesForDataSet 查找 TDataSet 中可以排序的特定的对象。正如你所知道的,TDataSet 不支持数据排序,但它的派生对象 TQuery 或 TClientDataSet 却允许实现数据排序。使用过程 RegisterDatasetFeaturesEh ,你可以注册 TDatasetFeaturesEhClass 类,该类可以实现对 TQuery, TADOQuery 以及 TClientDataSet 对象进行排序。简单地通过 uses 子句添加 Ehlib...(EhlibBDE,EhlibADO,EhlibCDS)的单元之一到你的工程的任意单元中,与它们相连的数据网格将自动对该数据集进行排序。 EhLibBDE, EhLibADO, EhLibCDS 通过在单元数据集中调用 RegisterDatasetFeaturesEh 过程来实现初始化。对于其它数据集类型,你必须编写、并注册可以实现该数据集排序的新对象。书写过程 T[你的数据集]DatasetFeaturesEh.ApplySorting ,你可以存取那些使用了 SortMarkedColumns 属性的列以实现直接排序。你可以查看 DbUtilsEh 单元中的示例以明白如何编写T[你的数据集]DatasetFeaturesEh 类及查看 EhLibBDE 单元以明白如何注册 T[你的数据集]DatasetFeaturesEh 类。 

引擎           数据集           单元文件 

BDE            TQuery           EhLibBDE 
ADO            TADOQuery        EhLibADO 
ClientDataSet  TClientDataSet   EhLibCDS 
DBExpress      TSQLQuery        EhLibDBX 
InterBase      Express TIBQuery EhLibIBX 

【译【者注】: 
   实际上,实现该功能非常简单(以下我以BDE为例说明如何实现自动排序): 
   1.在窗体上放置一个 DBGridEh 组件,并将其连接到相应的 BDE 数据集; 
   2.将该组件的[OptionsEn]中的 dgAutoSortMarking 属性设置为 True; 
   3.双击该组件,在其弹出的属性编辑器中添加相关字段; 
   4.将要排序的字段的属性列表的 [Title]的 TitleButton 属性设置为 True; 
   5.最后,千万不要忘了在 uses 子句中加上 EhlibBDE单元。 

好了,使用上面的方法,你会发现原来通过 Ehlib 实现数据的自动排序居然如些简单!

 
 2003-12-5 15:39:37     以下这段文字摘自《Delphi 园地》

【定制网格标题 】--
-【复杂标题】 
   TDBGridEh 允许在多列上创建标题,设置 DBGridEh.UseMultiTitle 属性为 True 并且填充字段的标签或列标题的标题,可以使用下面的规则:字段标签中的文本部分或列标题必须由几部分组成,并且用 "|" 分割,几个列的每一个通用部分都设置为相同。其它字段或标题必须在相应的部分包含同样的文本。 

例如:
Field1.DisplayLabel := 'Title1|SubTitle1';
Field2.DisplayLabel := 'Title1|SubTitle2';

DBGridEh.Columns[0].Title.Caption := 'Title1|SubTitle1';
DBGridEh.Columns[1].Title.Caption := 'Title1|SubTitle2'; 

-【按钮式标题】 
   设置Column.Title.TitleButton 为 True可以强制标题单元为按钮式。写 OnTitleBtnClick事件来控制用户单击标题单元时的操作。 

-【在标题中显示位图】 
   To show bitmap in titles instead of caption use TitleImages property of TDBGridEh and ImageIndex property of TColumnTitleEh. 

-【自动用位置标识排序标题】. 
   TDBGridEh allows to show special sortmarking bitmaps (small triangles) in the right part of title cell. In order to automatically marking title by sortmarking bitmaps add dghAutoSortMarking to OptionsEh property. Add dghMultiSortMarking too in order to allow sortmarking several columns simultaneously. Set Column.Title.TitleButton to true for titles which will have possibility to change sortmarkers at run time. At runtime clicking on title will change sortmarking. Holding Ctrl key allows to mark several columns simultaneously. After user change sormarking grid call OnSortMarkingChanged event. You can write this event to change sorting and reopen in dataset. Use SortMarkedColumns property to access to sortmarked columns. 

-【标题属性的默认值】
   使用TDBGridEh.ColumnDefValues.Title来设置标题属性的默认值。 

【定制网格页脚】-- 
-【页脚以及统计值】 
   TDBGridEh allows to show special row (footer) or rows at bottom part. Use FooterRowCount property to specify the number of footer rows in the grid. Use Footer or Footers property of TColumnEh object to specify information which need to show in footer cells. Footers property useful then you have more then one footer rows. Footers is a collection of TColumnFooterEh objects where information from i-th aliment of collection will be show in i-th cell of footer column. In footer cell, it is possible to show: Sum value for specified field, record count, value of a specified field or static text. Use property Footer.ValueType or Footers[i].ValueType to specify which type of value will be show in footer cell. If ValueType = fvtStaticText, then set the property Value to specify text which need to show. If ValueType = fvtFieldValue, then you need to set property FieldName to specify field, value of which need to show. To force grid to calculate total values need to activate SumList (DBGridEh.SumList.Active := True). Set ValueType to fvtSum and grid must to show sum value of the column field in the footer cell, you can also specify Column.Footer.FieldName to calculate total value of the other field. Set ValueType to fvtCount to force grid to show count of records in the footer cell.

-【定制网格数据单元】 
   在数据单元中显示字段值为图形。 
   TDBGridEh allows to show bitmaps from TImageList component depending on field values. To show bitmaps depending on field values need: Fill list of field values to Column.KeyList property (every value in separate line) and set Column.ImageList property to ImageList control that has the bitmap in according index. Set Column.NotInKeyListIndex to index of bitmap that will be shown if field's value does not correspond to any value in KeyList (for instance you can set index of image for Null field value). At run time you are not allowed to edit bitmap in column cell. Use blank key and mouse click to set next value from Column.KeyList to the field; Shift-blank key and Shift-Mouse click to set previous value from Column.KeyList. Set Column.DblClickNextval to True have allows to change value on mouse double click. 

【检查框式的逻辑及非逻辑值】
   Grid automatically shows checkboxes for boolean field. To show checkboxes for non boolean fields fill first line of Column.KeyList property that corresponds to the checked state of the checkbox, second line - non checked state, and set Column.Checkboxes ptoperty to True. Line of KeyList can represent more than one value in a semicolon-delimited list of items. 

【数据行高度】 
   使用 RowHeight 和 RowLines 属性来指定数据行高。完整的数据行高 = 行线高度+行高。设置 RowSizingAllowed 为 True 以允许可以在运行是使用鼠标来改变行高。
   设置Column.WordWrap为True可以使数据行中文本多行显示。如果行高>文本行,它就换行。 

【显示备注字段】 
   设置 DrawMemoText to True来显示文本式的备注字段。. 

【定制单元格字体及颜色】
   TDBGridEh 中的 Font 和 Color 属性描述了数据网格中绘制单元格的字体和颜色。
   TColumnEh 中的 Font 和 Color 属性描述了指定列中绘制单元格的字体和颜色。 

【事件定制单元格字体及颜色】 
   有几个事件可以让你能够在绘制单元格前定制单元格字体和颜色。你可以写TDBGridEh的OnDrawColumnCellEvent事件句柄来在控制在网格单元中绘制数据。你可以使用Canvas属性的方法来绘制单元格。但是如果你只想改变字体或颜色的属性,我建议你使用下面的事件。你可以写TDBGridEh的OnGetCellParams事件来控制在绘制数据单元以前所指定的操作。你可以改变绘制字体及背景色。这个事件适合你在想改变整行的字体或颜色时使用。如果你想改变指定列中单元格的属性,你可以使用TColumnEh.OnGetCellParams。写这个事件用来控制在一列数据单元被重绘或编辑时的操作。在一列数据单元被重绘以前,你可以改变绘制字体,背景色,对齐方式,图像索引,文本或检查框。在编辑一列数据单元以前,你可以改变编辑字体,背景色,文本或只读状态。 

【列属性的默认值】 
   使用ColumnDefValues属性来设置列属性的默认值。新创建的列将从ColumnDefValues属性中获得属性值,并且直到第一次为其指定值为止。

【在网格的适当位置放置编辑器】--
-【在下拉列表中显示几个字段】 
   在下拉列表中显示几个下拉字段,需要设置列的LookupDisplayFields属性到字段的Semicolons属性来分割多个字段名。命名为Column.Field.LookupResultField的属性必须位于LookupDisplayFields列表中。多字段的下拉列表只能应用于下拉字段。 

-【显示下拉方式的列】 
   你可以通过KeyList 和 PickList 属性在相关的的字段中显示其它文本。KeyList显示包含在字段的值而非PickList索引所包含的值。 Column.NotInKeyListIndex to index of text from PickList that will be shown if field value do not contain in KeyList (for instance you can set index of text for Null field value). Set Column.DblClickNextval to True to change value on mouse double click. 

-【下拉式计算器】 
   对于 TDateField 和 TDateTimeField 字段,inplace 编辑器将显示下拉按钮以显示显示下拉计算器。设置 Column.ButtonStyle 为 cbsNone 以禁止显示下拉按钮。 

【设置编辑器颜色和字体】 
   Inplace编辑器可以设置数据单元的颜色和字体。数据单元使用OnGetCellParams 事件来控制列的颜色和字体。 Inplace 编辑器在行高>一行的高度时自动设置为多行模式并且将列的属性 WordWrap 设置为True.

【自动填充网格列宽到网格客户区】 
   设置AutoFitColWidths为True以自动重置列宽来设置网格的宽度等于客户区宽度。 MinAutoFitWidth 属性决定网格的最小宽度,列宽将会被重新计算。 

【3D或平面外观】 
   使用 OptionsEh 属性来显示/隐藏固定的3D框架,冷区,页脚以及数据行。
   使用 Flat 属性来设置用平面方式显示数据网格。 

【从多种格式导入/导出数据到TDBGridEh】 
   EhLib 的函数集可以从DBGridEh导出数据到Text, Csv, HTML, RTF, XLS以及其内部格式。它可以保存数据到流(TStream对象)或文件。 

例子
Pascal: SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,'c:/temp/file1.txt',False);
C++: SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsText),DBGridEh1,"c://temp//file1.txt",false); 

   EhLib 的函数集可以从 Text以及其内部格式的数据导入到DBGridEh的数据集中。它可以从文件中读取数据或读取数据到流(TStream对象)。 

【其它特性】-- 
   用lookup 编辑器,你可以在运行时清空(设置为Null) LookupKeyField 值。比如选择整个文本然后按Delete键。 

-【冷区】 
   冷区是数据网格列集左边显示的不可滚动的区域。与固定列不同的是,冷区的列可以获得编辑焦点。可以通过设置FrozenCols属性来设置右边不可滚动的列集。 

-【增量搜索】 
   TDBGridEh 允许用户在网格列中实现特定的“增量”搜索。当用户进入增量搜索时他可以显示字符以及网格,并且在当前的列中查找文本。使用 dghIncSearch 和 dghPreferIncSearch的值(在OptionsEh 选项中) 在数据网格中操作增量搜索。 dghIncSearch 值允许在数据网格中进行增量搜索。运行时你能够使用下面的键进行增量搜索:

        Ctrl+F - 开始增量搜索。
        Ctrl+Enter - 查找下一个匹配记录。
        Ctrl+Shift+Enter - 查找前一个匹配记录。

   如果OptionsEh选项中的 dghIncSearch 是只读的,那么网络将自动设置增量模式在第一次按键以及1.5秒后返回普通模式。 dghPreferIncSearch 值决定网格设置自动增量搜索模式在第一次按键时替代单元编辑。

【水平或垂直滚动条】 
   使用 VertSctollbar, HorzSctollbar 属性来显示/隐藏以及跟踪水平或垂直滚动条。 

【多选】 
   TDBGridEh 允许在选定的区域上进行选择记录,列以及矩形区域等操作: 

×允许多选会影响下面这些属性:
 Options 选项中的 dgMultiSelect 属性 - 设置是否允许多选。
 Options 选项中的 dghClearSelection 属性- 设置在用户移到下一个单元时是否清除已选记录。
 Options 选项中的 EditActions 属性 -设置用户可以在已选记录上执行哪些操作(比如,拷贝,剪切,删除,粘贴,全选等)。 
 Options 选项中的 AllowedSelections 属性-设置允许选定记录的类型(比如,行,列,矩形区域等)。 
 Options 选项中的 Selection 属性-设置一个当前的多选状态,已选记录,列或矩形区域以及存取它们的属性和函数。 

【从注册表或ini文件中保存或恢复网格和列的层次】 
   TDBGridEh 有一个常规设置来从注册表或ini文件中保存和恢复网络以及列的层次:
     RestoreColumnsLayout - 从注册表中恢复列的次序,宽度,排序标志。
     RestoreColumnsLayoutIni - 从ini文件中恢复列的次序,宽度,排序标志。 
     RestoreGridLayout - 从注册表中恢复列的次序,宽度,可视,排序标志,排序索引或行高。 
     RestoreGridLayoutIni - 从ini文件中恢复列的次序,宽度,可视,排序标志,排序索引或行高。 
     SaveColumnsLayout - 保存列的次序,宽度,排序标志到注册表中。 
     SaveColumnsLayoutIni - 保存列的次序,宽度,排序标志到ini文件中。 
     SaveGridLayout - 保存列的次序,宽度,可视,排序标志,排序索引或行高到注册表中。 
     SaveGridLayoutIni - 保存列的次序,宽度,可视,排序标志,排序索引或行高到ini文件中。 

『以下内容仅供参考了,因为不知道它那个版本是多少,目前最新的版本是3.2吧,俺正在用,感觉很不错啊~~』
 当前版本的TDBGridEh不支持的特性: 
 TDBGridEh 不能设置每一个数据窗口中单独行的行高。
 TDBGridEh 不能象TreeView那样工作。它不能拥有节点和枝叶。
 TDBGridEh 不能横向或纵向合并数据单元。 

【将已存在的TDBGrid组件转换为TDBGridEh组件】: 
   尽管TDBGridEh并不是从TCustomDBGrid组件继承而来的,但是在TDBGridEh和TDBGrid中还是有一些相似的属性。 
   它允许仅用一点点代价来转换已存在的TDBGrid组件到TDBGridEh。

【注意】:可以按照下面的提示来转转换已存在的TDBGrid组件到TDBGridEh:
   在Delphi的IDE中打开包含有TDBGrid组件的应用程序。 
   设置视图方式为文本方式(Alt-F12)。 
   if key=VK_RETURN then //Key:回车
   begin
     if (grdDetailData.SelectedIndex=grdDetailData.Columns.Count-1) and not (dgRowSelect in grdDetailData.Options) then
     BEGIN
       if (dgEditing in grdDetailData.Options) and (grdDetailData.Row=grdDetailData.RowCount-1) then //从表GRID能进行编辑和当前光标焦点在最后一行时
         acAddDetailExecute(self)
       else
       begin
         grdDetailData.Row:=grdDetailData.Row+1; //改变光标焦点行到下一行(当为新增加时,这句不用运行
         grdDetailData.SelectedIndex:=0 //改变光标焦点列到第一列
       end;
     END ELSE
     BEGIN
       grdDetailData.SelectedIndex:=grdDetailData.SelectedIndex+1;
       while grdDetailData.Columns[grdDetailData.SelectedIndex].ReadOnly do
         grdDetailData.SelectedIndex:=grdDetailData.SelectedIndex+1;
     END;
     key:=0;
   end;
   if key=VK_INSERT then //Insert键:新增一条记录
   begin
     acAddDetailExecute(self);
     key:=0;
   end;
   if key=VK_DELETE then //Delte: 删除一条记录
   begin
     acDeleteDetailExecute(self);
     key:=0;
   end;

【页脚合计】
  1、设置DBGRIDEH属性的FooterRowCount值为1;
  2、设置DBGRIDEH属性的SumList的Active值为true;
  3、设置你要求和的该列的Footer的ValueType类型为fvtSum;
  4、运行OK!
   在DataSet打开时写:
     DBGridEh1.Columns[0].Footer.Value := IntToStr DBGridEh1.DataSource.DataSet.RecordCount);

 
 2003-12-5 16:56:13     Ehlib 的 DBGridEh 控件怎样才能像 dxDBGrid 控件那样输出文件到 EXCEL

以下是EHLIB的导出代码:(其实EHLIB的DEMO1中已有)

procedure TInvoiceManager.ppmSaveSelectionClick(Sender: TObject);
var ExpClass:TDBGridEhExportClass;
   Ext:String;
begin
 SaveDialog1.FileName := 'file1';
 if (ActiveControl is TDBGridEh) then
   if SaveDialog1.Execute then
   begin
     case SaveDialog1.FilterIndex of
       1: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
       2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
       3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
       4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
       5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
     else
       ExpClass := nil; Ext := '';
     end;
     if ExpClass <> nil then
     begin
       if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <>
          UpperCase(Ext) then
         SaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext;
       SaveDBGridEhToExportFile(ExpClass,TDBGridEh(ActiveControl),
            SaveDialog1.FileName,False);
     end;
   end;
end;

 
 2003-12-5 17:05:48     Ehlib 在 Delphi 7 中的安装(我可是花了半天的力气才搞定的哦)

Delphi 7中的安装方法

  1. 把 EhLib 中的 common 和 DataService 文件拷贝到 Delphi7 目录中.
  2.在 TOOLS->Environment Options->Library->Library Path 中添入EHLIB路径。
  3.打开新建文件夹中的 EHLIB70.DPK ,编译一下,但不要安装。
  4.打开Ehlib中的DclEhLib70.DPK,编译,安装 
  5. 在Delphi 7中打开DclEhLib70.dpk,编译并安装。
  6. 组件面板中出现一个EhLib的组件页。
  7. 打开附带的DEMOS,编译并运行,测试安装成功。
 

 
 2003-12-8 16:41:54     DBGridEh控件的页脚属性怎么设?

0、将dBGridEh.FooterRowCount := 1
1、将DBGridEh.SumList.Active := True;
2、将Columns[要求和的字段].Footer.ValueType := vtSum;
就行了

最后要注意,在FormCloseQuery事件中,一定要将SumList.Active := False,因为在数据集中的数据多了以后,FormClose会让DBGridEh释放所有EhLib资源,会使得退出很慢,所以将SumList.Active := False不会引起退出很慢

 
 2003-12-10 11:22:37     如何实现在DbgridEh中不同的行显示不同的颜色?或某一些条件的行显示特定的颜色?

【实现 DBGridEh 隔行分色显示】
procedure TForm1.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
  if DBGridEh1.SumList.RecNo mod 2 = 1 then
    Background := $00FFC4C4
  else
    Background := $00FFDDDD;
end;


【DBGridEh 在某些条件下某行显示特定颜色】
procedure TForm1.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh; AFont: TFont; var Background: TColor; State: TGridDrawState);
begin

 //在 name 字段值为 aaa 的行设置行背景色(ado 设置情况下)
 if ADOQuery1.FieldByName('name').AsString = 'aaa' then
     Background := $00FFC4C4

 //在 xm 字段值为 Li ming 的行设置行背景色(bde 设置情况下)
 else if DBGridEh1.DataSource.DataSet.FieldByName('xm').AsString = 'Li ming'  then
    Background := $00FFC4C4
 else
    Background := $00FFDDDD;

end;  

 
 2003-12-10 14:19:28     DBGridEh 控件导出文件到 EXCEL 的补充说明(关于多表头导出的设计思路)

   如果表头是着样的:
     |Mergetitle|
     ------------
     Col1|Col2
   分析表头几层,然后根据其表头的'|' 将,其还原成
     |Mergetitle|Mergetitle
     ----------------------
     Col1       |Col2
   再导入到Excel里合并单元格即可!

 
 2003-12-10 14:55:16     在dbgrideh中允许选择多行,如何知道哪些行被选中?

是个BOOKMARK类型的属性。
SelectedRows: TBookmarkList
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: Integer;
s: string;
begin
if DBGrid1.SelectedRows.Count>0 then
  with DBGrid1.DataSource.DataSet do
    for i:=0 to DBGrid1.SelectedRows.Count-1 do
    begin
      GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
      for j := 0 to FieldCount-1 do
      begin
        if (j>0) then s:=s+', ';
        s:=s+Fields[j].AsString;
      end;
      Listbox1.Items.Add(s);
      s:= '';
    end;
end;  

 
 2003-12-10 15:06:19     dbgrideh 上选择多行之后,要求把所选择的记录全部添加入SQL数据库的一个固定表中。

dbgrideh.selectedrows记载了所有被选择行的bookmark;利用SelectedRows和GotoBookmark完成。代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
i, j: Integer;
s: string;
begin
if DBGrid1.SelectedRows.Count>0 then
  with DBGrid1.DataSource.DataSet do
    for i:=0 to DBGrid1.SelectedRows.Count-1 do
    begin
      GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
      for j := 0 to FieldCount-1 do
      begin

        if (j>0) then s:=s+', ';
        s:=s+Fields[j].AsString;
      end;
      Listbox1.Items.Add(s);
      s:= '';
    end;
end;

 
 2004-2-11 12:45:10     在dbgrideh中直接点击title就可按点击的那个字段排序的方法

第一种方法(未测试)
procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh);
begin
//点击GridEh标题排序
if (Column.Title.SortMarker = smNoneEh) or (Column.Title.SortMarker = smDownEh) then
  begin
    ADOQuery1.SORT := COLUMN.FIELDNAME;
    Column.Title.SortMarker := smUpEh
  end
else
  begin
    ADOQuery1.SORT := COLUMN.FIELDNAME + ' DESC';
    Column.Title.SortMarker := smDownEh
  end;
end; 

第二种方法(未测试)
procedure TPrintMai_frm.DBGridEh1TitleClick(Column: TColumnEh);
var
sortstring: string;
begin //进行排序
with Column do
begin
  if FieldName = '' then
    Exit;
  case Title.SortMarker of
    smNoneEh:
      begin
        Title.SortMarker := smDownEh;
        sortstring := Column.FieldName + ' ASC';
      end;
    smDownEh: sortstring := Column.FieldName + ' ASC';
    smUpEh: sortstring := Column.FieldName + ' DESC';
  end; //数据集排序。
  try
    DM.DataModule1.qry2.Sort := sortstring //dataset为实际数据集变量名
  except
  end;
end;
end;  

 
 2004-3-24 17:34:05     ehlib的颜色控制及打印

From:
   http://www.delphibbs.com/keylife/iblog_show.asp?xid=191

     很多说根据条件在数据网格中显示不同颜色的说法都是在DrawColumnCell事件里,这样显示没有问题,但在ehlib中如果想打印出来可就不行了。
ehlib提供了GetCellParams事件,可以显示和打印
//只能显示,不能打印
procedure TfrmQueryContractInfo.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
var
OldColor,OldColumnColor:TColor;
v:TColCellParamsEh;
begin
{  OldColor:=DBGrid1.Canvas.Font.Color ;
if (Column.Field.FieldName = '填制调单时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应发货时间').AsDateTime) then
begin
  //v:=TColCellParamsEh.Create ;
  //Column.GetColCellParams(true,v);
  //v.Font.Color :=clRed;
  //Column.FillColCellParams(v);
  //v.Free;
  DBGrid1.Canvas.font.Color := clRed;
end;

//Column.GetColCellParams  .FillColCellParams()

if (Column.Field.FieldName = '移交时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('移交时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应移交时间').AsDateTime) then
  DBGrid1.Canvas.Font.Color := clRed;

if (Column.Field.FieldName = '填制运输单时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('填制运输单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime) then
  DBGrid1.Canvas.Font.Color := clRed;

DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
DBGrid1.Canvas.Font.Color:=OldColor;
}
end;
//可以显示,可以打印
procedure TfrmQueryContractInfo.DBGrid1GetCellParams(Sender: TObject;
Column: TColumnEh; AFont: TFont; var Background: TColor;
State: TGridDrawState);
var
OldColor,OldColumnColor:TColor;
v:TColCellParamsEh;
begin
//OldColor:=DBGrid1.Canvas.Font.Color ;
if (Column.Field.FieldName = '填制调单时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应发货时间').AsDateTime) then
  AFont.Color := clRed;

if (Column.Field.FieldName = '移交时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('移交时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应移交时间').AsDateTime) then
  AFont.Color := clRed;

if (Column.Field.FieldName = '填制运输单时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('填制运输单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime) then
  AFont.Color := clRed;

if (Column.Field.FieldName = '实际到货时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('实际到货时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('要求到货时间').AsDateTime) then
  AFont.Color := clRed;
//DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
//DBGrid1.Canvas.Font.Color:=OldColor;
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 DBGridEh(增强型表格组件)功能详解.....................................................................4 二、应用实例..........................................................................................................................5 1. 定制标题行......................................................................................................................5 1) 制作复杂标题行.......................................................................................................5 2) 按钮式标题..............................................................................................................5 3) 标题行显示图片.......................................................................................................5 4) 如根据不同状态在数据单元格中显示相应图片...................................................5 5) 自动显示标题行的升降排序标志符(▽降序△升序)并做相应排序...............6 6) 点dbgrideh 标题排序..............................................................................................7 7) 在DBGridEH 中怎样实现多重排序(标题出现0123等排列序号)? ................ 11 8) 让dbgrid显示序号................................................................................................ 11 2. 外观布局........................................................................................................................12 1) 根据不同字段值显示相应的小图片.....................................................................12 2) 显示检查框(checkbox)外观.............................................................................12 3) 显示单、多列下拉列表.........................................................................................12 4) 显示日历下拉列表.................................................................................................13 5) 3D或平面外观效果...............................................................................................13 6) 行头和列头的启用关闭.........................................................................................13 7) DBGrid如何实现透明效果?.................................................................................13 8) 滚动条的各种应用.................................................................................................16 9) 数据行高................................................................................................................19 10) DBGrid设置Rowheight后如何将单元格内容纵向和垂直都居中?..............19 11) 设置DBGridEH 自适应列宽的最好方法.........................................................20 12) Ehlib 的DBGridEh首列加序号........................................................................21 13) 分行分列、单元格的颜色设置.........................................................................23 14) 点击不同单元格列,执行不同的动作.............................................................27 15) 下拉式计算器.....................................................................................................28 16) 鼠标移到某个单元格,指针形状改变.............................................................28 17) 自动填充网格列宽到网格客户区.....................................................................29 18) 从注册表或ini文件中保存或恢复网格和列的层次。...................................29 3. 编辑功能........................................................................................................................29 1) 多选........................................................................................................................29 2) 文本多行显示.........................................................................................................30 3) 显示备注字段.........................................................................................................30 4) 如何让dbgrideh1 显示数据时只显示两位小数...................................................30 5) 获得当前DBGridEh表中单元格的序号.............................................................30 6) 怎样在dbgridEh和Edit中显示金额的千分号...................................................30 7) end;请问怎么才能使DBGridEh不滚动就能提交数据?...................................32 8) 我怎么把dbgrid 里的数据一次插入到数据库呢................................................32 9) 在DBGrid中可选中行而又可进入编辑状态......................................................32 10) 修正DBGrideh 丢失焦点时自动关闭输入法的问题......................................35 11) DBGRIDEH选定多行删除怎么实现...............................................................36 12) DBGrid 滚动表格的代码...................................................................................37 4. 统计功能........................................................................................................................37 白波九道整理自用版 第 3 页 1) 页脚合计................................................................................................................37 2) 定制表格底部(footer)区域的汇总统计行.......................................................38 3) TDBSumList说明..................................................................................................38 4) 如何工作以及为什么有时SumList的集合值计算不正确?.............................39 5) dbgrideh列求和.....................................................................................................39 5. 数据功能........................................................................................................................40 1) 查找字段点击某列值的下拉按纽弹出一个从数据库取值下拉列表...............40 2) 使用DBGridEh自动过滤实现方法.....................................................................40 3) 使用DBGridEh自动过滤实现方法2 ..................................................................41 4) DBGridEh 控件中使用过滤功能 (适用ehlib 5.2 ehlib 5.3)................................42 5) 支持模糊查询.........................................................................................................43 6) ehlib4.4.50中支持模糊匹配的修改方法..............................................................44 7) EhLib 5.0 Build 5.0.13的过滤字串都是模糊过滤修改.......................................45 8) 滚动条滚动时选择不变,还有自动过滤功能的实现.........................................45 9) 增量搜索................................................................................................................46 10) ehlib总是按两次ctrl+f才出来查找框,怎么办?.........................................46 11) 如何改良dbgrideh的文字过滤........................................................................46 12) 改进DBGrideh 表头点击自动排序,实现双击状态轮流.................................47 13) 改良Ehlib 的排序功能,加快排序速度.............................................................49 14) 在DbGridEh中显示TreeView效果................................................................50 15) DBGridEh-KeyList、PickList............................................................................51 16) 主从表设置........................................................................................................53 17) 在DbGridEh中显示表中表..............................................................................55 6. 输入/输出.......................................................................................................................56 1) 导入导出数据.........................................................................................................56 2) 从多种格式导入/导出数据到TDBGridEh...........................................................57 3) DBGRID 生成EXCEL报表.................................................................................57 4) 使用TPrintDBGridEh 组件.................................................................................61 5) 打印时确定Ehlib定义的报表表头颜色? ............................................................61 6) Ehlib 中的PrintDBGridEh如何印页码,即第几页共几页...................................62 7) 怎么让PrintDBGridEh只打印DbGridEh 中指定的列.......................................62 8) 怎样进行横向打印/ 打印预览?........................................................................62 7. 将存在的DBGrid组件转换为DBGridEh组件...........................................................62 三、EhLib安装问题.............................................................................................................64 1. EhLib 安装步骤.............................................................................................................64 2. EhLib 安装问题(dbsumlst.dcu出错) ..........................................................................64 3. 安装提示找不到.BPL文件...........................................................................................65 四、Delphi 下的优秀表格(Grid)显示控件........................................................................65 1. NextGrid .........................................................................................................................65 2. TopGrid 3.01...................................................................................................................65 3. XLGrid............................................................................................................................66 4. DevExpress ExpressQuantumGrid .................................................................................66 5. TMS Grid Pack...............................................................................................................68 6. EhLib ..............................................................................................................................71 白波九道整理自用版 第 4 页 7. ProfGrid..........................................................................................................................71 8. EasyGrid .........................................................................................................................71 五、delphi 中配置文件的使用(*.ini).........................................................................71 六、窗口动画效果Animatewindow应用...........................................................................72 七、Delphi Excel to Sql Server..............................................................................................73 八、Delphi控制Excel的经验如下:..................................................................................76
EhLib.VCL 9.5内部版本9.5.012专业版。 ---------------------------------------------- 该库包含Borland Delphi版本7、9的组件和类。 Developer Studio 2006,Delphi 2007,Embarcadero RAD Studio 2009-XE10.3,Lazarus。 目录 ----------------- 总览 安装库 安装帮助 示范节目 注册和价格 其他资讯 关于作者 从哪儿开始。 ------------------- 从主要的Demo项目开始概述库 。\ Demos \ Bin \ MainDemo.Exe。 (已编译的演示文件在该库的评估版中可用) 如果您使用了库的早期版本,则可以阅读摘要 的新功能和更改中的内容history-eng.html。 此版本库中有关新功能的更多详细信息 可以在文件中找到-关于EhLib 9.5 Eng.doc 要在IDE中安装该库的新版本,请使用安装程序 。\ Installer \ EhLibInstaller.exe 如果安装时有任何问题,请写信给ehlib支持 地址support@ehlib.com 您还可以按照以下说明在库IDE中手动安装文件 第2章安装库 安装后,请确保所有已安装组件的可操作性。 为此,请打开IDE,编译并启动一个主要的演示项目。 。\ Demos \ MainDemo \ Project1_XE2.dpr 阅读下一个文件,以获取有关使用库组件的完整说明: 。\ Hlp \ ENG \“ EhLib-用户指南.doc” 在文件中阅读有关EhLib for Lazarus的信息-Lazarus \ readme.txt 总览 -------- 该库包含几个组件和对象。 TDBGridEh组件 TDBGridEh提供TDBGrid的所有功能 并添加了一些新功能,如下所示: 允许选择记录,列和矩形区域。 可以对应于多个/所有列的特殊标题。 能够显示总和/计数/其他字段值的页脚。 自动调整列大小以将网格宽度设置为等于客户端宽度。 能够更改行和标题的高度。 允许自动中断单行长标题和数据行 到多行。 标题可以充当按钮,并可以选择显示排序标记。 自动排序标记。 能够用省略号截断长文本。 查找列表可以显示几个字段。 在查找字段中进行增量搜索。 冻结的列。 DateTime选择器支持TDateField和TDateTimeField。 允许根据字段值显示TImageList中的位图。 允许隐藏和跟踪水平或垂直滚动​​条。 允许隐藏列。 允许显示冻结,页脚和数据行的3D框架。 允许绘制备忘字段。 多行就地编辑器。 比例滚动与数据集的排序无关。 自动显示布尔字段的复选框。允许显示 其他类型字段的复选框。 具有保存和还原布局的程序(可见列,列 注册表或ini文件中的顺序,列宽,排序标记,行高)。 允许显示提示(工具提示)以显示单元格中不适合的文本。 允许将数据导出为Text,Csv,HTML,RTF,XLS和内部格式。 允许从文本和内部格式导入数据。 可以对各种数据集中的数据进行排序。 可以过滤各种数据集中的数据。 当DBGridEh连接到TMemTable类型的数据集时,它允许: 在不移动活动记录的情况下查看所有数据。 显示TMemTable记录的树型结构。 在SubTitle过滤器的下拉列表中自动形成值列表。 根据所选库伦创建分组记录。 TDBVertGridEh组件 在“垂直方向”中显示数据集中的一条记录的组件。 有一个特殊的列来显示字段标题 可以像DBGridEh中一样自定义就地编辑器和单元格数据。 TDBLookupComboboxEh组件 提供TDBLookupCombobox的所有功能并添加 几个新功能如下: 可以有平面样式。 允许只将值分配给KeyValue属性 显示文本属性。 允许将值键入(分配)到数据列表中未包含的Text属性 (样式= csDropDownEh)。 允许将KeyValue和Text保持为互不影响的值。 当KeyField,ListField,ListSource,DataField和DataSource生效 属性为空。 下拉列表可以: 显示标题 有上浆力, 自动将宽度设置为列表字段DisplayWidth之和(宽度= -1), 用户按下按键时自动掉线。 编辑按钮可以: 显示下拉,省略号或位图图像。 有指定的宽度。 还有其他事件:OnKeyValueChanged,OnButtonClick。 TDBSumList组件 此组件用于总计一个记录中的记录的总数和数量。 TDataSet具有动态更改。组件保留TDBSum的列表 对象,其中包含组操作的类型(goSum或goCount) 和名称总和字段(无需goCount字段名称)。 TPrintDBGridEh组件 TPrintDBGridEh提供用于预览和预览的属性和例程。 具有以下功能的TDBGridEh组件的打印: 能够垂直扩展行,直到打印所有文本。 缩放网格以使其适合页面宽度的能力。 能够打印/预览网格标题。 能够打印/预览页面标题和页面页脚 指定当前页面,当前日期,当前时间和/或静态的宏 文本。 自动打印/预览TDBGridEh的选定区域 不为空。 能够在网格之前和之后打印/预览富文本。 TPreviewBox组件 TPreviewBox使您可以创建可自定义的运行时预览。 TPrinterPreview对象 TPrinterPreview允许您将可打印数据记录在缓冲区中以进行跟踪 将它们输出到屏幕上并发送到打印机。TPrinterPreview具有所有功能,并且 属性与TPrinter对象中的属性相同。您可以类似地使用TPrinterPreview对象 TPrinter的功能,除了一些细节。在TPrinter Printer.Canvas.Handle和 Printer.Handle相同,但在TPrinterPreview中PrinterPreview.Canvas.Handle 表示图元文件,其中的数据和PrinterPreview.Handle的内容相同 代表Printer.Handle。这意味着您必须使用 用于绘制操作的PrinterPreview.Canvas.Handle(DrawText,DrawTexteEx等) 并在返回有关以下信息的函数中使用PrinterPreview.Handle 打印机功能(GetDeviceCaps等)。全局功能PrinterPreview 返回默认的PrinterPreview对象,并以默认预览形式显示数据。 TDBEditEh组件 表示可以显示和编辑字段的单行或多行编辑控件 在数据集中或可以用作非数据感知的编辑控件。 TDBDateTimeEditEh组件 表示可以显示和编辑的单行日期或时间编辑控件 数据集中的日期时间字段,或可用作非数据感知的编辑控件。 TDBComboBoxEh组件 表示结合了编辑框的单行或多行编辑控件 带有可滚动列表,并且可以显示和编辑数据集中的字段,或者可以 用作非数据感知组合编辑控件。 TDBNumberEditEh组件 表示可以显示和编辑数字的单行数字编辑控件 数据集中的字段或可以用作非数据感知的编辑控件。 TPropStorageEh,TIniPropStorageManEh,TRegPropStorageManEh组件 组件实现了在设置中存储组件属性的技术 存储,如ini文件,注册表等。 TMemTableEh组件 数据集,将数据保存在内存中。它可能考虑为 记录。 此外,它: 支持一个特殊的接口,该接口允许DBGridEh组件查看所有 数据而不移动活动记录。 允许从TDataDriverEh对象(DataDriver属性)获取数据。 允许卸载更改回DataDriver中,可操作或推迟(在 CachedUpdates属性的相关性)。 允许在客户端上创建主/明细关系(过滤记录) 或在外部源上(更新参数[Params]并需要数据 从DataDriver)。 允许一次(无动态支持)排序数据,包括 计算和查找字段。 允许在设计时创建和填充数据,并将数据保存在的dfm文件中 形成。 允许以树的方式进行记录。每条记录可以有一条记录 元素分支和本身是其他父母记录的元素。 组件TDBGridEh支持显示这些组件的树型结构 记录。 允许连接到其他TMemTableEh的内部阵列(通过 ExternalMemData属性)并使用其数据:排序,过滤,编辑。 具有用于在列表的一列中请求所有唯一值列表的接口 记录数组,忽略数据集的本地过滤器。TDBGridEh使用此 属性,用于自动填充字幕的DropDownBox中的列表 过滤单元。 TDataDriverEh组件 执行两项任务: 将数据传送到TMemTableEh。 处理TMemTableEh的更改记录(将它们记录在其他数据集中, 或调用事件以处理程序中的更改)。 TSQLDataDriverEh 具有四个TSQLCommandEh类型的对象的DataDriver:SelectCommand, DeleteCommand,InsertCommand,UpdateCommand,GetrecCommand。 TSQLDataDriverEh无法将查询传输到服务器,但会调用全局 (对于应用程序)执行SQL必须编写的事件 服务器上的表达式。 TBDEDataDriverEh,TIBXDataDriverEh,TDBXDataDriverEh和TADODataDriverEh组件。 这些是SQLDataDrivers,可以使用以下命令将查询传递到服务器 数据访问的相应驱动程序。 -------------------- 2.安装库 -------------------- -------------------- 2.1自动安装库 -------------------- 从“安装程序”文件夹中运行EhLibInstaller.exe程序以在以下位置安装EhLib Delphi / C ++ Builder IDE。该程序创建文件夹以保持EhLib二进制 和其他重新整理的文件,将重新整理的文件复制到创建的文件夹, 编译程序包,在IDE中注册程序包并编写重新格式化的路径 在注册表中。 如果您具有可执行的安装程序(例如,EhLibSetupD7Eval.exe) 那么您只需要运行程序并遵循安装过程即可。自动设置 将所有单元写入必要的目录,在IDE中安装软件包和帮助文件。 -------------------- 2.2手动安装库 ------------------- 按照以下说明从EhLib归档文件安装文件: - 2.2.1。对于RAD Studio XE2(Delphi)或更高版本: -------------------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值