Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Вопрос про сетку DBGrid   Найти похожие ветки 

 
Kostafey ©   (2006-11-17 10:59) [0]

Подскажите пожалуйста как сделать так чтобы
1) заголовки столбцов сетки были многострочными.
2) численные значения в сетке автоматически округлялись до 2-х знаков после запятой.


 
KilkennyCat ©   (2006-11-17 11:01) [1]

http://www.delphimaster.ru/articles/stringgrid/index.html


 
Kostafey ©   (2006-11-17 11:02) [2]

В статье про StringGrid а в DBGrid будет так же ?

А что касается округления ?


 
KilkennyCat ©   (2006-11-17 11:11) [3]

для округления использовать format()


 
Anatoly Podgoretsky ©   (2006-11-17 12:00) [4]

> Kostafey  (17.11.2006 11:02:02)  [2]

А какой смысл округлять целое до двух знаков после запятой.


 
Kostafey ©   (2006-11-17 17:08) [5]

> для округления использовать format()

А что format ? там кроме вставки в текст можно еще что-то делать ?
Да и потом форматировать нужно результаты запроса во свей сетке, а не
конкретное число

> А какой смысл округлять целое до двух знаков после запятой.

Так там в основном числа с дробными значениями у меня.


 
clickmaker ©   (2006-11-17 17:37) [6]


> [5] Kostafey ©   (17.11.06 17:08)

для округления использовать TNumericField.DisplayFormat


 
Kostafey ©   (2006-11-18 17:00) [7]

> http://www.delphimaster.ru/articles/stringgrid/index.html

Нет, к сожалению приведенный в статье код не применим до конца к DBGrid
Например, там приводиться:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var s:string;
begin
s := "Hello world! Hello world! Hello world! Hello world!";
DrawText(StringGrid1.Canvas.Handle,PChar(s),length(s),Rect,DT_WORDBREAK);
end;


Мне же нужно сделать многострочные заголовки столбцов DBGrid
Пишу:

procedure TForm_ABR_main.DBGrid1DrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;
 State: TGridDrawState);
var s:string;
   Rect1: TRect;
begin
Rect1:=Rect;
 s := "Hello world! Hello world! Hello world! Hello world!";
DrawText(DBGrid1.Canvas.Handle,PChar(s),length(s),Rect1,DT_WORDBREAK);
end;


А он на это событие DrawColumnCell рисует не заголовки, а содержимое таблицы (на событие DrawDataCell результат тот же).
Т.е. DisplayText столбцов без изменений, зато содеримое всех прочих ячеек запролняется много строчными приветами, хотя и тут не совсем так, ведь высота строки не увеливается (нижних строк просто не видно).


 
Kostafey ©   (2006-11-18 16:59) [8]

> http://www.delphimaster.ru/articles/stringgrid/index.html

Нет, к сожалению приведенный в статье код не применим до конца к DBGrid
Например, там приводиться:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var s:string;
begin
s := "Hello world! Hello world! Hello world! Hello world!";
DrawText(StringGrid1.Canvas.Handle,PChar(s),length(s),Rect,DT_WORDBREAK);
end;


Мне же нужно сделать многострочные заголовки столбцов DBGrid
Пишу:

procedure TForm_ABR_main.DBGrid1DrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;
 State: TGridDrawState);
var s:string;
   Rect1: TRect;
begin
Rect1:=Rect;
 s := "Hello world! Hello world! Hello world! Hello world!";
DrawText(DBGrid1.Canvas.Handle,PChar(s),length(s),Rect1,DT_WORDBREAK);
end;


А он на это событие DrawColumnCell рисует не заголовки, а содержимое таблицы (на событие DrawDataCell результат тот же).
Т.е. DisplayText столбцов без изменений, зато содеримое всех прочих ячеек запролняется много строчными приветами, хотя и тут не совсем так, ведь высота строки не увеливается (нижних строк просто не видно).


 
KilkennyCat ©   (2006-11-18 18:06) [9]

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


 
KilkennyCat ©   (2006-11-18 18:54) [10]

гм... соврал. на картинку повелся.


 
KilkennyCat ©   (2006-11-18 19:05) [11]

http://e-dok.narod.ru/delphi/question1/comp/comp-118.html


 
Kostafey ©   (2006-11-18 22:50) [12]

> http://e-dok.narod.ru/delphi/question1/comp/comp-118.html


Похоже в яблочко, но как же использовать этот код (прошу прощения за ламерство)?

Там описан наследник визуального компонента DBGrid, но как разместить его на форме ?


 
Kostafey ©   (2006-11-18 23:46) [13]

> Там описан наследник визуального компонента DBGrid, но как
> разместить его на форме ?


О, понял это оказалось просто.

Но вот в чем юмор: пример-то неработает !
WinProcs.DrawText(Canvas.Handle, C, StrLen(C), Rect, Format);

Не будет работать Rect - константа.
Я правлю как

procedure TMultiLineDBGrid.DrawDataCell(Sender: TObject; const Rect: TRect;
 Field: TField; State: TGridDrawState);
var

 Format: Word;
 C: array[0..255] of Char;
 Rect1:Trect;
begin
 Rect1:=Rect;


Потом подключаю к форме:

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Dbmygrid, DB, ADODB;

type
 TForm1 = class(TForm)
   ADODataSet1: TADODataSet;
   DataSource1: TDataSource;
   ADOConnection1: TADOConnection;
   procedure FormCreate(Sender: TObject);

 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 DBMultiGrid: TMultiLineDBGrid;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 DBMultiGrid:=TMultiLineDBGrid.Create(self);
 DBMultiGrid.Parent:=Form1;
 DBMultiGrid.Left:=10;
 DBMultiGrid.Top:=10;
 DBMultiGrid.Height:=200;
 DBMultiGrid.Width:=600;
 DBMultiGrid.Align:=alClient;
 DBMultiGrid.DataSource:=DataSource1;
 DBMultiGrid.LinesPerRow:=2;      
 DBMultiGrid.Visible:=true;
end;

И все бестолку. Заголовки однострочные...


 
Kostafey ©   (2006-11-19 11:54) [14]

Нет, не получается разобраться.
Неужели никто не делал многострочных заголовков DBGrid ?


 
Anatoly Podgoretsky ©   (2006-11-19 13:05) [15]

> Kostafey  (19.11.2006 11:54:14)  [14]

Делал, не делал, какая разница, раз не отвечают значит так надо и не надо спамить.
Ждите ответа.


 
Kostafey ©   (2006-11-19 19:00) [16]

> Делал, не делал, какая разница, раз не отвечают значит так
> надо и не надо спамить.
> Ждите ответа.

Прошу прощения, я просто возврашал вопрос к обсуждению.


 
Kostafey ©   (2006-11-19 22:09) [17]

> [0] Kostafey ©   (17.11.06 10:59)
> Подскажите пожалуйста как сделать так чтобы
> 1) заголовки столбцов сетки были многострочными.
> 2) численные значения в сетке автоматически округлялись
> до 2-х знаков после запятой.


Я нашел ответы на вопросы. Если кому-то понадобится вот:

Округление лучше всего делать в самом SQL-запросе (во всяком случае SQL Server это поддерживает), например:
select round((select count(*)/3.0 from LSOSTAV),2) округляет значение до 2-х знаков после запятой.

Многострочную сетку удобно делать используя TDBGridEh
http://www.farpost.com/personal/dmitryb/RUS/


 
Игорь Шевченко ©   (2006-11-20 11:32) [18]


> Неужели никто не делал многострочных заголовков DBGrid ?


Делали, даже статью написали.

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=806


 
clickmaker ©   (2006-11-20 11:58) [19]


> Округление лучше всего делать в самом SQL-запросе (во всяком
> случае SQL Server это поддерживает), например:
> select round((select count(*)/3.0 from LSOSTAV),2) округляет
> значение до 2-х знаков после запятой

не факт. Серверная логика должна быть как можно более абстрактной. Т.е. не должна содержать элементов, явно указывающих на форму отображения данных на клиенте.
Твоему клиенту надо, например, 2 знака, а другому потребуется 4...


 
Kostafey ©   (2006-11-20 20:01) [20]

> [18] Игорь Шевченко ©   (20.11.06 11:32)

О! Верно, классная статья ! Спасибо ! На будущее буду знать.


> [19] clickmaker ©   (20.11.06 11:58)

Ничего не понимаю. Клиент сам посылает запрос серверу сам же ответ получеат.
Другой клиент пусть свой запрос посылает.
У меня задача узкая ухищьрений не требует.


 
Leonid Troyanovsky ©   (2006-11-20 20:14) [21]


> Kostafey ©   (20.11.06 20:01) [20]

> О! Верно, классная статья ! Спасибо ! На будущее буду знать.


Нет уж.
Будь любезен - познавай сейчас.

--
Regards, LVT.



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

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.052 c
3-1159857916
Megabyte
2006-10-03 10:45
2006.12.10
Можно ли прописать алиас без перезапуска сервера?


15-1163802090
lookin
2006-11-18 01:21
2006.12.10
Реформа РАН и прочее


2-1164527238
Chuk & Gek
2006-11-26 10:47
2006.12.10
мыло


1-1162125556
Yuiop
2006-10-29 15:39
2006.12.10
Конвертировать из Rave в *.doc


15-1164215051
Сэм
2006-11-22 20:04
2006.12.10
DDR 1024Mb PC 3200 SAMSUNG