1 (edited by alamsho 2017-10-28 18:14:32)

Topic: Tablegrid

Есть такой скрипт но не работает.
procedure lethal (Sender: string; var Cancel: boolean);
var
   i, c: integer;
begin
    c := Base.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
        if SQLExecute('Select lethal from Base where id='+Base.TableGrid1.sqlValue)>0 then
        begin
                Base.TableGrid1.Cell[1,i].Color := clRed;
        end;
    end;
end;

Надо украсить вторую колонку TableGrid1 в красный если lethal (Да/Нет) в Base больше нуля или конкретно 1.
Помогите пожалуйста.

Re: Tablegrid

так наверное

procedure lethal (Sender: string; var Cancel: boolean);
var
   i, c: integer;
begin
    c := Base.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
       if Base.TableGrid1.Cells[1,i] >'0' then Base.TableGrid1.Cells[1,i] := clRed then    Base.TableGrid1.Cell[1,i].Color := clRed;
        end;
end;

Re: Tablegrid

Мне надо только это условие:
  if SQLExecute('Select lethal from Base where id='+Base.TableGrid1.sqlValue)>0

В таблице Base имеется поле lethal (boolean). Надо отметить что у меня и таблица и форма именуются Base.

Re: Tablegrid

Думаю вы неправильно создаете процедуру события для компонента
ваша процедура выглядит так, как будто вы просто скопировали ее заголовок из другой процедуры OnClick для кнопки.

procedure lethal (Sender: string; var Cancel: boolean);

здесь можете посмотреть как правильно создавать процедуру для обработки события
http://myvisualdatabase.com/help_ru/scr … rview.html

Dmitry.

Re: Tablegrid

Сделал двумя способами но оба не работают.

procedure Base_Button13_OnClick (Sender: string; var Cancel: boolean);
var
   i, c: integer;
begin
    c := Base.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
        if SQLExecute('Select lethal from Base where id='+Base.TableGrid1.sqlValue)>0 then
        begin
                Base.TableGrid1.Cell[1,i].Color := clRed;
        end;
    end;
end;

Второй способ тоже не работает.
procedure Base_TableGrid1_OnChange (Sender: string);
var
   i, c: integer;
begin
    c := Base.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
        if SQLExecute('Select lethal from Base where id='+Base.TableGrid1.sqlValue)>0 then
        begin
                Base.TableGrid1.Cell[1,i].Color := clRed;
        end;
    end;
end;

Re: Tablegrid

Пожалуйста приложите ваш проект.

Dmitry.

Re: Tablegrid

Я уже приложил проект в другой теме.

http://myvisualdatabase.com/forum/misc. … download=1

Re: Tablegrid

procedure Base_TableGrid1_OnChange (Sender: string);
var
   i, c: integer;
begin
    c := Base.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
        if SQLExecute('Select lethal from Base where id='+ IntToStr(Base.TableGrid1.dbIndexToID(i)) )=1 then
        begin
                Base.TableGrid1.Cell[1,i].Color := clRed;
        end;
    end;
end;

но при большом количество записей возможно данный скрипт будет тормозить, т.к. на каждую строку в гриде делается sql запрос, было бы лучше выводить поле lethal в грид, и на основе его значения раскрашивать ячейки.

Dmitry.

Re: Tablegrid

Тогда надо эту колонку скрыть. Можно ли сделать это и будет ли скрипт работать если она скрыта?

Re: Tablegrid

alamsho wrote:

Тогда надо эту колонку скрыть. Можно ли сделать это и будет ли скрипт работать если она скрыта?

Будет, пример

procedure Base_TableGrid1_OnChange (Sender: string);
var
   i, c: integer;
begin
    Base.TableGrid1.Columns[14].Visible := False; // скрываем колонку lethal
    c := Base.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
        if Base.TableGrid1.Cell[14, i].AsInteger=1 then  // 1-да, 2-нет
        begin
                Base.TableGrid1.Cell[1,i].Color := clRed;
        end;
    end;
end;
Dmitry.

Re: Tablegrid

спасибо работает