如何在CXGrid整数列中显示图片?

时间:2016-11-21 21:29:03

标签: delphi

我有一个TcxGrid组件来显示SQL Server表的数据。 如何在CXGrid整数列中显示图片? 此列中的单元格只能是0或1。

如果整数列单元格值= 0则; cximagelist.picture index = 0 其他 cximagelist.picture index = 1

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以非常简单地执行此操作,如下所示:

  1. 在网格中添加一列以显示图片并将其Properties值设置为Image

  2. 在运行时,使用您要显示的位图加载两个位图,BM1BM2

  3. 将代码添加到新列OnCustomDrawCell,如下所示。

  4. 代码:

    procedure TForm1.cxGrid1DBTableView1Column1CustomDrawCell(Sender:
        TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo:
        TcxGridTableDataCellViewInfo; var ADone: Boolean);
    var
      BM : TBitMap;
      ARect : TRect;
      I : Integer;
    begin
        ARect := AViewInfo.Bounds;
    
        //  In the next line, 2 is the index of my integer column which 
        //  contains the value which deterimnes the image to display.
    
        I := AViewInfo.GridRecord.Values[2];
        if I = 0 then
          BM := BM1
        else
          BM := BM2;
        ACanvas.Draw(ARect.Left, ARect.Top, BM);
        ADone := True;
    end;
    

    当然,如果您不想在网格中显示整数字段的值,则只需删除其列或将其Visible属性设置为False即可。

答案 1 :(得分:0)

您可以尝试使用ImageComboBox列:

procedure Test(ACol: TcxGridColumn);
var
  props: TcxImageComboBoxProperties;
  i: Integer;
  item: TcxImageComboBoxItem;
begin
  ACol.PropertiesClass := TcxImageComboBoxProperties;
  Assert(ACol.Properties is TcxImageComboBoxProperties);
  props := TcxImageComboBoxProperties(ACol.Properties);
  props.Images := YourImages;
  for i in PossibleIndices do
  begin
    item := props.Items.Add;
    item.Description := ''; // or IntToStr(i)
    item.Value := i;
    if i = 0 then
      item.ImageIndex := 0
    else
      item.ImageIndex := 1;
  end;
end;

您可以使用表单设计器直观地完成上述大部分操作。