Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Внизопять про раскраску Grid oв Найти похожие ветки
← →
BorisUK (2002-11-28 16:32) [0]Проблема в том что пока не попадались пустые поля все было ровно,
А теперь Выдает "Invalid variant type conversion" при каждом обращении к этому полю.
Вот процедура которая работает у меня.
procedure TMain_f.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
c, c1: integer;
s: string;
begin
c:=0;
c1:=0;
try
//Когда пытаемся присвоить в s чегонить чего нет - срабатывает
s:=Column.Field.Value;
// Так я пытаюсь избежать исключения, но все равно не получается
except
s:=" ";
end;
if ((AnsiUpperCase(dm.CDS_V_DocTree.FieldByName"STATE").asString)="СОСТОЯНИЕ1")then
begin
c:=clRED;
c1:=$F0F0F0;
end;
DBGrid.Canvas.Brush.Color:=c1;
DBGrid.Canvas.FillRect(Rect);
DBGrid.Canvas.Font.Color:=c;
DBGrid.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, s);
//Собственно раньше оно срабатывало сдесь когда вместо "s"
//стояло Column.Field.Value
end;
Все отличие от того что писали раньше в том, что мне надо раскрашивать построчно...
Еслиб не это то под раскраску попадалиб только поля со значениями...
Что посоветуете уважаемые?
← →
stone (2002-11-28 16:35) [1]
> s:=Column.Field.Value;
if not Column.Field.IsNull then
s := Column.Field.AsString
else
s := "";
← →
BorisUK (2002-11-28 16:49) [2]Спасибо - помогло :)
Теперь хотябы при первом запуске программы все работает :)
Но теперь таже проблема возникает когда пытаюсь изменить размер поля, которое не поместилось в Грид..
Тоесть - полей много... Сначало видимы одни, мотаем скролом на следующие и делаем ресайз. Результат - таже ошибка...
Когда делаем ресайз полей которые были видемы сразу, то нет никаких ошибок. Что за нифиг блин!
← →
Victor_Cr (2002-11-28 17:36) [3]S := Column.Field.AsString; :~)
← →
Victor_Cr (2002-11-28 17:44) [4]Что-то похожее на это :~)
procedure TMain_f.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
c, c1: integer;
s: string;
begin
c:=0;
c1:=0;
// try
//Когда пытаемся присвоить в s чегонить чего нет - срабатывает
// S := Column.Field.Value;
// Так я пытаюсь избежать исключения, но все равно не получается
// except
// s:=" ";
// end;
S := Column.Field.AsString;
if ((AnsiUpperCase(dm.CDS_V_DocTree.FieldByName"STATE").asString)="СОСТОЯНИЕ1")then
begin
c:=clRED;
c1:=$F0F0F0;
DBGrid.Canvas.Brush.Color:=c1;
DBGrid.Canvas.FillRect(Rect);
DBGrid.Canvas.Font.Color:=c;
DBGrid.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, s);
end
else
DBGrid.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
← →
BorisUK (2002-11-29 06:59) [5]Спасибо - опять помогло.
Вернее была еще одна ошибка, Толмачев Борисне заметил как в одном месте кода использовал без проверки на nill и без AsString
Field.Value :)
Что поделаешь, к вечеру мозги закипают и не хотят думать.
Зато попутно выяснил, что с вариантным типом ваще так играться дорогое удовольствие.
Всегда надо делать AsString,
проверять IsNull
Ну try except тоже для подстраховки :)
А то вот такие пенки под дых он дает инода....
← →
Victor_Cr (2002-11-29 08:44) [6]Проверку на Null делать совсем не обязательно, и трай ... ексепт... тоже (покрайней мере в этом месте). Немогу себе представить структуру (кроме Блоба), которая будет материться при присвоении "как стринг", Null преобразуеться просто в "". Числа и даты тоже нормально конвертируются. Так что код можно еще уменьшить.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c