Delphi DBGrid 数据排序(ADOQuery、ADOTable、AdoDataSet、Clientdataset、UniQuery、FDQuery)
Delphi DBGrid 数据排序(ADOQuery、ADOTable、AdoDataSet、Clientdataset、UniQuery、FDQuery)
1、DBGrid 配合ADOQuery 使用
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
procedure TForm1 . DBGrid1TitleClick(Column: TColumn); var i: integer ; begin for i := 1 to DBGrid1 . Columns . Count do begin //恢复所有标题字体为默认 DBGrid1 . Columns[i - 1 ].Title . Font . Color := clWindowText; DBGrid1 . Columns[i - 1 ].Title . Font . Style := []; end ; if ADOQuery1 . Sort <> (Column . FieldName + ' ASC' ) then //判断原排序方式 begin ADOQuery1 . Sort := Column . FieldName + ' ASC' ; Column . Title . Font . Color := clRed; //改变标题行字体为红色,表示当前的排序方式为升序 Column . Title . Font . Style := [fsBold]; end else begin ADOQuery1 . Sort := Column . FieldName + ' DESC' ; Column . Title . Font . Color := clBlue; //改变标题行字体为红色,表示当前的排序方式为降序 Column . Title . Font . Style := [fsBold]; end ; end ; |
2、DBGrid 配合ADOTable 操作类似
?
1 2 3 4 5 6 7 8 9 10 11
|
procedure TForm1 . DBGrid1TitleClick(Column: TColumn); begin with ADOTable1 do begin if DBGrid1Boolean then TADOTable(ryADOTable1).Sort := Column . FieldName + ' DESC' else TADOTable(ryADOTable1).Sort := Column . FieldName; DBGrid1Boolean := not (DBGrid1Boolean); end ; end ; |
3、其他参考(AdoDataSet、Clientdataset)
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
//How to Use: //procedure TForm1.DBGrid1TitleClick(Column: TColumn); //begin // GridTitleSort(column); //end; procedure GridTitleSort(Column: TColumn); type TFieldTypeSet = set of TFieldType; var s, cFieldName: string ; i: integer ; DataSet: TDataSet; GridFieldTypeSet: TFieldTypeSet; procedure SetTitle; var ii: integer ; cStr: string ; c: TColumn; begin for ii := 0 to TDBGrid(Column . Grid).Columns . Count - 1 do begin c := TDBGrid(Column . Grid).Columns[ii]; cStr := c . Title . Caption; if (pos( '↑' , cStr) = 1 ) or (pos( '↓' , cStr) = 1 ) then begin Delete(cStr, 1 , 2 ); c . Title . Caption := cStr; end ; end ; end ; begin DataSet := Column . Grid . DataSource . DataSet; GridFieldTypeSet := [ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftTypedBinary, ftFixedChar, ftWideString, ftLargeint, ftVariant]; if not (Column . Field . DataType in GridFieldTypeSet) then Exit; //§PÂ_¦r¬qÃþ«¬ SetTitle; if Column . Field . FieldKind = fkLookup then cFieldName := Column . Field . KeyFields else if Column . Field . FieldKind = fkCalculated then cFieldName := Column . Field . KeyFields else cFieldName := Column . FieldName; //=================================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' + Column . FieldName; Fields := Column . FieldName; DescFields := Column . FieldName; end ; end ; TClientDataSet(DataSet).IndexFieldNames := '' ; TClientDataSet(DataSet).IndexName := 'i' + Column . FieldName; Column . Title . Caption := '↓' + Column . Title . Caption; end else begin TClientDataSet(DataSet).IndexName := '' ; TClientDataSet(DataSet).IndexFieldNames := column . fieldname; Column . Title . Caption := '↑' + Column . Title . Caption; end ; end ; end ; |
4、如果使用的是 UniQuery 操作类似:
操作 UniQuery 的 IndexFieldNames属性:
?
1
|
indexfieldnames:= '字段 desc' , |
5、FDQuery
参考操作 4
创建时间:2020.09.11 更新时间:2021.01.22 / 2021.06.16
赞 (0)