平时打字很少用感叹号,实在没招了!
在网上搜了好久,看到的解决方法都是在PickList和KeyList里写入值,然后就顺理成章的使用了。
可我怎么就不行呢?太奇怪了。
点进去看了PickList,是个TStringList,我就自己定义了一个TStringList,然后用PickList.Assign(),
那个Column也设置了ButtonStyle=cbsDropDown;AlwaysShowEditButton:=True,总之是按照网上写的做了。全都做完之后主动去取PickList也是有值的。
现在的状况是点击那个DropDown的向下箭头的按钮,没反映。
当然了,按钮会扁下去再弹上来
这个东西的代码没有什么好贴得了吧,麻烦会的同志指点一下吧。第一次发帖,不懂规矩,不知道这样的问题给多少分,如果少了的话请别放在心上。

解决方案 »

  1.   

    好吧,可能有点长
    //接口部分
    THeaderField = class;
      THeaderFields = class(TCollection)
      private
        FHeaderFields: THeaderField;
        procedure AddField(AField:THeaderField);
        function GetItem(Index: Integer): THeaderField;
        procedure SetItem(Index: Integer; const Value: THeaderField);
      published
        property Fields:THeaderField read FHeaderFields write FHeaderFields;
      public
        property Items[Index: Integer]: THeaderField read GetItem write SetItem;default;
      end;  THeaderField = class(TCollectionItem)
      private
        FFieldName: string;
        FDisplayName: string;
        FisCheckBox: Boolean;
        FisVisible: Boolean;
        FWidth: Integer;
        FisAttach: Boolean;
        FAttachValue: TStringList;
        FAttachItem: TStringList;
        FAlignment: TAlignment;
        FisReadOnly: Boolean;
      published
        property FieldName:string read FFieldName write FFieldName;
        property Displayname:string read FDisplayName write FDisplayName;
        property isCheckBox:Boolean read FisCheckBox write FisCheckBox;
        property isVisible:Boolean read FisVisible write FisVisible;
        property isReadOnly:Boolean read FisReadOnly write FisReadOnly;
        property isAttach:Boolean read FisAttach write FisAttach;
        property Alignment:TAlignment read FAlignment write FAlignment;
        property AttachItem:TStringList read FAttachItem write FAttachItem;
        property AttachValue:TStringList read FAttachValue write FAttachValue;
        property Width:Integer read FWidth write FWidth;
      public
        constructor Create(Collection: TCollection); override;
        destructor Destroy; override;
      end;//实现区
    constructor THeaderField.Create(Collection: TCollection);
    begin
      inherited;
      FAttachValue := TStringList.Create;
      FAttachItem := TStringList.Create;
    end;destructor THeaderField.Destroy;
    begin
      FAttachValue.Free;
      FAttachItem.Free;
      inherited;
    end;function THeaderFields.GetItem(Index: Integer): THeaderField;
    begin
      Result := THeaderField(inherited Items[Index]);
    end;procedure THeaderFields.SetItem(Index: Integer; const Value: THeaderField);
    begin
      inherited SetItem(Index, TCollectionItem(Value));
    end;procedure THeaderFields.AddField(AField: THeaderField);
    begin
      AField.Collection:=Self;
    end;procedure TForm1.CreateHeader;
    begin
    AHeaderField := THeaderField.Create(nil);
      with AHeaderField do
      begin
        FieldName:='vOperator';
        DisplayName:='条件操作符';
        isCheckBox:=False;
        isVisible:=True;
        isReadOnly:=False;
        isAttach:=True;
        AttachItem.Add('等于');
        AttachValue.Add('0');
        AttachItem.Add('模糊查找');
        AttachValue.Add('1');
        AttachItem.Add('大于');
        AttachValue.Add('2');
        AttachItem.Add('小于');
        AttachValue.Add('3');
        AttachItem.Add('大于等于');
        AttachValue.Add('4');
        AttachItem.Add('小于等于');
        AttachValue.Add('5');
        AttachItem.Add('不等于');
        AttachValue.Add('6');
        Alignment:=taCenter;
        Width:=100;
      end;
      AHeaderFields.AddField(AHeaderField);procedure TForm1.InsertHeaderToGrid(ADBGridEh:TDBGridEh);
    var
      i:Integer;
      AHeaderFld:THeaderField;
      AColumn:TColumnEh;
    begin
      if ADBGridEh.Columns.Count>0 then
        ADBGridEh.Columns.Clear;
      for i:=0 to AHeaderFields.Count -1 do
      begin
        AHeaderFld:=AHeaderFields.Items[i];
        if AHeaderFld.isVisible then
        begin
          AColumn:=ADBGridEh.Columns.Add;
          AColumn.FieldName:=AHeaderFld.FieldName;
          AColumn.Alignment:=AHeaderFld.Alignment;
          AColumn.ReadOnly:=AHeaderFld.isReadOnly;
          AColumn.Width:=AHeaderFld.Width;
          AColumn.Title.Caption:=AHeaderFld.Displayname;
          AColumn.Checkboxes:=AHeaderFld.isCheckBox;
        end;
        if AHeaderFld.isAttach then
        begin
          AColumn.AlwaysShowEditButton:=True;
          AColumn.DblClickNextVal:=True;
          AColumn.ButtonStyle:=cbsDropDown;
          AColumn.PickList:=AHeaderFld.AttachItem;
          AColumn.KeyList:=AHeaderFld.AttachValue;
        end;
      end;
    end;procedure TForm1.btn1Click(Sender: TObject);
    begin
      AHeaderFields:=THeaderFields.Create(THeaderField);
      CreateHeader;
      InsertHeaderToGrid(dbgrdh1);
    end;
      

  2.   

    你做个测试直接写死PickList和KeyList看有没有问题。
      

  3.   

    平时打字很少用感叹号,实在没招了!
    在网上搜了好久,看到的解决方法都是在PickList和KeyList里写入值,然后就顺理成章的使用了。
    可我怎么就不行呢?太奇怪了。
    点进去看了PickList,是个TStringList,我就自己定义了一个TStringList,然后用PickList.Assign(),
    那个Column也设置了ButtonStyle=cbsDropDown;AlwaysShowEditButton:=True,总之是按照网上写的做了。全都做完之后主动去取PickList也是有值的。
    现在的状况是点击那个DropDown的向下箭头的按钮,没反映。
    当然了,按钮会扁下去再弹上来
    这个东西的代码没有什么好贴得了吧,麻烦会的同志指点一下吧。
    红色的那部份好像多余的
      

  4.   

    不用这么复杂 
    xx.PickList := 'aaa,bbb';xx.KeyList := 'AAA,BBB'