При попытке вывести данные из БД в DBGrid, есть одна проблема. Данные в DBGrid могут отображаться как (WIDEMEMO). Что бы это подправить надо внести изменения в одну из двух процедур отрисовки.
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
var
Grid : TStringGrid;
Texto : String;
Rectangulo : TRect;
begin
Rectangulo:=Rect;
Grid := TStringGrid(Sender);
if Field.IsBlob then begin
Grid.Canvas.FillRect(Rect);
Texto := Field.AsString;
DrawText( Grid.Canvas.Handle,
PChar(Texto),
StrLen(PChar(Texto)),
Rectangulo,
DT_WORDBREAK);
end;
end;
Или вот другой вариант
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Assigned(Column) then
begin
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, ' '+Column.Field.AsString);
end;
end;
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
var
Grid : TStringGrid;
Texto : String;
Rectangulo : TRect;
begin
Rectangulo:=Rect;
Grid := TStringGrid(Sender);
if Field.IsBlob then begin
Grid.Canvas.FillRect(Rect);
Texto := Field.AsString;
DrawText( Grid.Canvas.Handle,
PChar(Texto),
StrLen(PChar(Texto)),
Rectangulo,
DT_WORDBREAK);
end;
end;
Или вот другой вариант
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Assigned(Column) then
begin
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, ' '+Column.Field.AsString);
end;
end;
РЕШЕНИЕ, работает в Embarcadero Delphi.
ОтветитьУдалить- есть компоненты: DBGrid1 <- DataSource1 <- ADOQuery1
- в ADOQuery1.SQL вставлен запрос "SELECT a, b, a & b AS Name FROM tabble1;"
- в результате в DBGrid1, поле "Name" содержит (WIDEMEMO)
- ПКМ по ADOQuery1 -> Fields editor
- ПКМ по окну Fields editor, выбираем Add all fields
- выбираем поле "Name", заходим в его Events, и создаем событие OnGetText
- вставляем в него одну строчку и в итоге поулучаем следующий код
DelphiВыделить код
1
2
3
4
procedure TForm1.ADOQuery1NameGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
Text := Sender.AsString;
end;
с ADOTable работает таким же образом.
ОтветитьУдалить