本文整理自网络,侵删。 最全面的DBGrid标题排序实现方法:<span class="hljs-function"><span class="hljs-keyword">procedure</span> <span class="hljs-title">TSrv_SJSetForm</span>.<span class="hljs-title">DBGridEh1TitleClick</span><span class="hljs-params">(Column: TColumnEh)</span>;</span><span class="hljs-keyword">var</span> s,cFieldName:<span class="hljs-keyword">string</span>; i:integer; DataSet:TDataSet; <span class="hljs-function"><span class="hljs-keyword">procedure</span> <span class="hljs-title">setTitle</span>;</span> <span class="hljs-keyword">var</span> ii:integer; cStr:<span class="hljs-keyword">string</span>; c:TColumnEh; <span class="hljs-keyword">begin</span> <span class="hljs-keyword">for</span> ii:=<span class="hljs-number">0</span> <span class="hljs-keyword">to</span> TDBGridEh(Column.Grid).Columns.Count-<span class="hljs-number">1</span> <span class="hljs-keyword">do</span> <span class="hljs-keyword">begin</span> c:=TDBGridEh(Column.Grid).Columns[ii]; cStr:=c.Title.Caption; <span class="hljs-keyword">if</span> (pos(<span class="hljs-string">'▲'</span>,cStr)=<span class="hljs-number">1</span>) <span class="hljs-keyword">or</span> (pos(<span class="hljs-string">'?'</span>,cStr)=<span class="hljs-number">1</span>) <span class="hljs-keyword">then</span> <span class="hljs-keyword">begin</span> Delete(cStr,<span class="hljs-number">1</span>,<span class="hljs-number">2</span>); c.Title.Caption:=cStr; <span class="hljs-keyword">end</span>; <span class="hljs-keyword">end</span>; <span class="hljs-keyword">end</span>;<span class="hljs-keyword">begin</span> <span class="hljs-comment">//setTitle; DataSet:=Column.Grid.DataSource.DataSet; if Column.Field.FieldKind=fkLookup then begin cFieldName:=Column.Field.KeyFields; Exit; end else if Column.Field.FieldKind=fkCalculated then begin cFieldName:=Column.Field.KeyFields; Exit; end else cFieldName:=Column.FieldName; setTitle; //=================================AdoDataSet===================== if DataSet is TCustomADODataSet then begin s:=TCustomADODataSet(DataSet).Sort; if s='' then begin s:=cFieldName; Column.Title.Caption:='▲'+Column.Title.Caption; end else begin if Pos(cFieldName,s)<>0 then begin i:=Pos('DESC',s); if i<=0 then begin s:=s+' DESC'; Column.Title.Caption:='?'+Column.Title.Caption; end else begin Column.Title.Caption:='▲'+Column.Title.Caption; Delete(s,i,4); end; end else begin s:=cFieldName; Column.Title.Caption:='▲'+Column.Title.Caption; end; end; TCustomADODataSet(DataSet).Sort:=s; end //============================Clientdataset========================== else if DataSet is TClientDataSet then begin if TClientDataSet(DataSet).indexfieldnames<>'' then begin i:=TClientDataSet(DataSet).IndexDefs.IndexOf('i'+Column.FieldName); if i=-1 then begin with TClientDataSet(DataSet).IndexDefs.AddIndexDef do begin Name:='i'+cFieldName;//Column.FieldName; Fields:=cFieldName;//Column.FieldName; DescFields:=cFieldName;//Column.FieldName; end; end; TClientDataSet(DataSet).IndexFieldNames:=''; TClientDataSet(DataSet).IndexName:='i'+cFieldName;//Column.FieldName; Column.Title.Caption:='?'+Column.Title.Caption; end else begin TClientDataSet(DataSet).IndexName:=''; TClientDataSet(DataSet).IndexFieldNames:=cFieldName;//Column.Fieldname; Column.Title.Caption:='▲'+Column.Title.Caption; end; end;end;</span> 相关阅读 >> Delphi 根据文件路径获取文件名 Delphi xe-xe3下最简单的获取硬盘序列号 Delphi 控制台读写 Delphi 禁止alt+f4关闭 Delphi tclientdataset的使用 Delphi操作多显示器 为什么编程是独一无二的职业 Delphi 判断网站文件是否存在 Delphi 调用dos nbtstat 并获得结果 Delphi 取得ie下面输入框内容 更多相关阅读请进入《Delphi》频道 >> 转载请注明出处:木庄网络博客 » delphi最全面的DBGrid点击标题实现排序