nighTuner & Yuyu's Space

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  0 随笔 :: 35 文章 :: 0 评论 :: 0 Trackbacks

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
  SetTitle;
  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?t??

  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;
//======================================================================


procedure WWGridTitleSort(Grid: TwwDBGrid; TitleName: String);
Type
  TFieldTypeSet = set of TFieldType;
var
  s, cFieldName: string;
  i: integer;
  DataSet: TDataSet;
  aField: TField;
  GridFieldTypeSet: TFieldTypeSet;
  procedure SetTitle;
  var
    ii: integer;
    cStr: string;
    c: TwwColumn;
  begin
    for ii := 0 to Grid.DataSource.DataSet.FieldCount -1 do
    begin
      c := Grid.Columns[ii];
      cStr := c.DisplayLabel;
      if (pos('??', cStr) = 1) or (pos('??', cStr) = 1) then
      begin
        Delete(cStr, 1, 2);
        c.DisplayLabel := cStr;
      end;
    end;
  end;
begin
  SetTitle;
  DataSet := Grid.DataSource.DataSet;
  aField := DataSet.FieldByName(TitleName);

  GridFieldTypeSet := [ftString, ftSmallint, ftInteger, ftWord,
                       ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate,
                       ftTime, ftDateTime, ftBytes, ftVarBytes,
                       ftTypedBinary, ftFixedChar, ftWideString,
                       ftLargeint, ftVariant];
  if not (aField.DataType in GridFieldTypeSet) then Exit;   //§P?_|r?q?t??

  if aField.FieldKind = fkLookup then
    cFieldName := aField.KeyFields
  else if aField.FieldKind = fkCalculated then
    cFieldName := aField.KeyFields
  else
    cFieldName := aField.FieldName;
  //=================================AdoDataSet=====================

  if DataSet is TCustomADODataSet then
  begin
    s := TCustomADODataSet(DataSet).Sort;
    if s = '' then
    begin
      s := cFieldName;
      aField.DisplayLabel := '??' + aField.DisplayLabel;
    end
    else
    begin
      if Pos(cFieldName, s) <> 0 then
      begin
        i := Pos('DESC', s);
        if i <= 0 then
        begin
          s := s + ' DESC';
          aField.DisplayLabel := '??' + aField.DisplayLabel;
        end
        else
        begin
          aField.DisplayLabel := '??' + aField.DisplayLabel;
          Delete(s, i, 4);
        end;
      end
      else
      begin
        s := cFieldName;
        aField.DisplayLabel := '??' + aField.DisplayLabel;
      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' + aField.FieldName);
      if i = -1 then
      begin
        with TClientDataSet(DataSet).IndexDefs.AddIndexDef do
        begin
          Name := 'i' + aField.FieldName;
          Fields := aField.FieldName;
          DescFields := aField.FieldName;
        end;
      end;
      TClientDataSet(DataSet).IndexFieldNames := '';
      TClientDataSet(DataSet).IndexName := 'i' + aField.FieldName;
      aField.DisplayLabel := '??' + aField.DisplayLabel;
    end
    else
    begin
      TClientDataSet(DataSet).IndexName := '';
      TClientDataSet(DataSet).IndexFieldNames := aField.FieldName;
      aField.DisplayLabel := '??' + aField.DisplayLabel;
    end;
  end;
end;
//======================================================================

posted on 2005-04-14 01:56 nighTuner 阅读(328) 评论(0)  编辑  收藏 所属分类: Delphi

只有注册用户登录后才能发表评论。


网站导航: