2016-11-21 3 views
1

У меня есть компонент TcxGrid для отображения данных таблицы SQL Server. Как отобразить изображение в столбце целых чисел CXGrid? Клетки в этой колонке могут быть только 0 или 1.Как отобразить изображение в столбце целых чисел CXGrid?

если значение ячейки целочисленного столбца = 0; индекс cximagelist.picture индекс = 0 еще cximagelist.picture = 1

enter image description here

+1

Вы можете попробовать столбец ImageComboBox и установить все элементы «Описание» в '' ''. –

ответ

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; 

Вы, вероятно, могли бы сделать большинство из вышеперечисленных визуально с дизайнером формы.

1

Вы можете сделать это довольно просто, следующим образом:

  1. Добавление столбца сетки для отображения изображение и установить его значение Properties на Image

  2. Во время выполнения загрузите два растровых изображения, BM1 и BM2 с растровыми изображениями, которые вы хотите отобразить.

  3. Добавить код в новый столбец OnCustomDrawCell, как показано ниже.

Код:

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.

Смежные вопросы