2016-11-21 1 views
1

Ich habe eine TcxGrid-Komponente, um Daten einer SQL Server-Tabelle anzuzeigen. Wie zeige ich ein Bild in der CXGrid Integer-Spalte an? Die Zellen in dieser Spalte können nur 0 oder 1 sein.Wie zeige ich ein Bild in der CXGrid Integer-Spalte an?

Wenn Ganzzahl Spaltenzellenwert = 0 dann; cximagelist.picture index = 0 sonst cximagelist.picture index = 1

enter image description here

+1

Sie könnten versuchen, eine ImageComboBox-Spalte und setzen Sie alle Elemente Beschreibung auf "". –

Antwort

0

Sie könnten eine ImageComboBox Spalte versuchen: mit dem Formular-Designer

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; 

Sie wahrscheinlich visuell die meisten der oben tun könnte.

1

du einfach ganz tun können, wie folgt:

  1. eine Spalte zu dem Raster zum Anzeigen das Bild und setzen Sie seinen Properties Wert auf Image

  2. Laden Sie zur Laufzeit zwei Bitmaps, BM1 und BM2 mit den Bitmaps, die Sie anzeigen möchten.

  3. Fügen Sie der neuen Spalte OnCustomDrawCell Code wie unten gezeigt hinzu.

Code:

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; 

Natürlich, wenn Sie wollen den Wert Integer-Feld ist im Raster nicht angezeigt werden, können Sie einfach seine Spalte löschen oder die Visible Eigenschaft auf False gesetzt.

Verwandte Themen