日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Delphi DBGrid 數(shù)據(jù)排序(ADOQuery、ADOTable、AdoDataSet、Clientdataset、UniQuery、FDQuery)

 容心居 2021-07-06

Delphi DBGrid 數(shù)據(jù)排序(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
//恢復(fù)所有標(biāo)題字體為默認(rèn)
    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; //改變標(biāo)題行字體為紅色,表示當(dāng)前的排序方式為升序
    Column.Title.Font.Style := [fsBold];
  end
  else
  begin
    ADOQuery1.Sort := Column.FieldName + ' DESC';
    Column.Title.Font.Color := clBlue; //改變標(biāo)題行字體為紅色,表示當(dāng)前的排序方式為降序
    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&Acirc;_&brvbar;r&not;q&Atilde;&thorn;&laquo;&not;
  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

 

 

創(chuàng)建時(shí)間:2020.09.11  更新時(shí)間:2021.01.22 /  2021.06.16

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多