Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

Вопрос про сетку 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.065 c
2-1164129979
flaxe
2006-11-21 20:26
2006.12.10
Вопрос по Линейке =))


2-1163934179
Lebedev
2006-11-19 14:02
2006.12.10
Ошибка «Данное имя устройства уже используется приложением в каче


2-1164278966
vtur
2006-11-23 13:49
2006.12.10
Как передать DLL-процедуре указатель на Owner (TComponent)


3-1159868219
ceval
2006-10-03 13:36
2006.12.10
Поиск даты при помощи LIKE


3-1159512584
vodvorezlaya
2006-09-29 10:49
2006.12.10
Трёхмерные таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский