Вниз
Скачать: CL | DM;

dxDBGrid + ImageList   Найти похожие ветки 

 
Sonia ©   (2007-09-04 15:14) [0]

Всем драсте!
Имеется dxDBGrid + OraStoredProc +ImageList 2-мя картинками. Делаю, чтобы в поле colSTAT (типа ImageColumn) отображалась соответствующая картинка.


procedure TfMain.dxDBGridCustomDrawCell(Sender: TObject; ACanvas: TCanvas;
 ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
 ASelected, AFocused, ANewItemRow: Boolean; var AText: String;
 var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
 var ADone: Boolean);
begin
  if AColumn.Name = "colSTAT" then
    if OraStoredProc.FieldByName("stat").Value = "ARR" then
      ImageList.Draw(ACanvas,ARect.Left,ARect.Top,1)
    else
      ImageList.Draw(ACanvas,ARect.Left,ARect.Top,0);
end;


Однако картинок нет. Выполняла пошагово - картинки рисуются, но при переходе на новую строку удаляются. В чем может быть ошибка и как ее решить?
Спасибо!


 
Lacmus ©   (2007-09-04 15:37) [1]

Использовать TdxDBGridImageColumn или полностью рисовать ячейку (ADone := True)


 
Sonia ©   (2007-09-04 16:21) [2]


> Использовать TdxDBGridImageColumn

Он и есть


 
Sonia ©   (2007-09-04 16:27) [3]

Так, этот вопрос исчерпан. Надо было установить в ImageIndexes значения при который должен ставится конкретный рисунок. Теперь вопрос по самой грид. Как сделать так, чтобы часть заголовка переносилась на другую строку?


 
Lacmus ©   (2007-09-04 16:34) [4]

HeaderMinRowCount ?


 
Sonia ©   (2007-09-04 16:48) [5]

О, отлично! Спасибо! :)


 
evvcom ©   (2007-09-05 09:35) [6]


> if AColumn.Name = "colSTAT" then

Марина, не делай так никогда. Придет тебе в голову завтра или через месяц, а то и не тебе, поменять имя столбца, и всё - приплыли! Ошибку будешь искать долго и мучительно. Делай так
if AColumn = colSTAT then

> но при переходе на новую строку удаляются. В чем может быть
> ошибка и как ее решить?

Ты при отрисовке грида используешь значение из DataSet. Грид только при изменении данных в DS достает их из него и сохраняет в своих внутренних массивах, при дальнейших отрисовках он курсор больше не трогает, поэтому ты для всех строк при отрисовке получаешь одно и то же значение OraStoredProc.FieldByName("stat").Value.

> if OraStoredProc.FieldByName("stat").Value = "ARR" then
>       ImageList.Draw(ACanvas,ARect.Left,ARect.Top,1)
>     else
>       ImageList.Draw(ACanvas,ARect.Left,ARect.Top,0);

Смотри, как более оптимально это написать:
ImageList.Draw(ACanvas,ARect.Left,ARect.Top, Integer(OraStoredProc.FieldByName("stat").Value = "ARR"));



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.014 c
6-1170415405
inex
2007-02-02 14:23
2007.09.30
переслать результат выполнения в коммандной строке


6-1169220531
Death
2007-01-19 18:28
2007.09.30
Узнать тип сообщения, присланого TServerSocket


3-1177057304
Amid
2007-04-20 12:21
2007.09.30
Цикл по всем записям ADODataSet


2-1188729507
MAXHo
2007-09-02 14:38
2007.09.30
Сохранение страниц в TWebBrowser


2-1188997579
antonn
2007-09-05 17:06
2007.09.30
операции с массивами




   Наверх