如何在运行时将拾取列表添加到DBGrid?

时间:2014-07-25 16:28:28

标签: delphi delphi-7 delphi-xe

我有一个DBGrid,当我在运行时分配SQLQuery时,它链接到客户端数据集 DBGrid自动分配列数。我需要的是当DBGrid自动分配列时我需要设置其中一列来分配一个选项列表。 谁能帮我? 以下过程调用show事件中的表单。该表单包含DataSource,ClientDataSet,SQLViewQuery(TSQLQuery),DatasetProvider和DBGridDetails(TDBGrid)。

procedure TViewDetailsForm.ViewPendingAndReturnCheques;
var I : Integer;
slPickList:TStringList;
begin
  slPickList := TStringList.Create;
  slPickList.Add('Pending');
  slPickList.Add('Returned');
  slPickList.Add('Passed');

  SQL := 'SELECT a.CHEQUE_NO, a.BANK, a.CHEQUE_DATE, a.AMOUNT,a.STATUS FROM CHEQUES a';

  //refreshisng the DBGrid
  SQLViewQuery.SQL.Clear;
  SQLViewQuery.SQL.Add(SQL);
  ClientDataSet.Active := false;
  ClientDataSet.Active := true;

  DBGridDetails.Columns[0].Width := _Block;
  DBGridDetails.Columns[1].Width := _Block;
  DBGridDetails.Columns[2].Width := _Block;
  DBGridDetails.Columns[3].Width := _Block;
  DBGridDetails.Columns[4].Width := _Block;


  for I := 0 to DBGridDetails.Columns.Count - 1 do
  begin
    if DBGridDetails.Columns[I].FieldName = 'STATUS' then
    begin
       DBGridDetails.Columns[i].ButtonStyle := cbsAuto;
       DBGridDetails.Columns[I].PickList := slPickList;
    end;
  end;

  Show;

end;

2 个答案:

答案 0 :(得分:1)

这是我刚刚在Delphi 2007中创建的一个示例应用程序,它演示了如何实现这一目标。以下是我设置的所有内容:

  1. 从IDE的主菜单中单击文件 - > New-VCL​​ Forms Application。
  2. 在表单上删除 TClientDataSet TDataSource TDBGrid
  3. 单击表单,然后使用Object Inspector创建新的 OnCreate 事件处理程序。添加以下代码:

    procedure TForm1.FormCreate(Sender: TObject);
    var
      SL: TStringList;
    begin
      with ClientDataSet1 do
      begin
        FieldDefs.Clear;
        FieldDefs.Add('OrderNo', ftInteger);
        FieldDefs.Add('Status', ftString, 10);
        CreateDataSet;
      end;
      ClientDataSet1.Active := True;
    
      // Connect a datasource to the CDS
      DataSource1.DataSet := ClientDataSet1;
    
      // Connect the grid to that datasource to create the columns.
      DBGrid1.DataSource := DataSource1;
    
      // Create the picklist for the second column (Status)
      SL := TStringList.Create;
      try
        SL.Add('Pending');
        SL.Add('Returned');
        SL.Add('Passed');
        DBGrid1.Columns[1].ButtonStyle := cbsAuto;
        DBGrid1.Columns[1].PickList := SL;
      finally
        SL.Free;
      end;
    end;
    
  4. 运行该应用程序,点击网格中的Status列,您就会看到上面PickList添加的三个选项。

  5. Image of DBGrid with PickList displayed

答案 1 :(得分:1)

您可以在运行时将值分配给dbgrid列选取列表。

以下是代码: 程序Tfrm1.FormShow(发件人:TObject); VAR   slPickList:TStringList中;   我:整数; 开始     slPickList:= TStringList.Create;     slPickList.Add('待定&#39);     slPickList.Add('返回的&#39);     slPickList.Add('传递&#39);     对于我:= 0到2做     开始        。dbgViewAxiomClaims.Columns 1 PickList.add(slPickList [I]); //指定   结束;   端;

结果如下:

enter image description here