![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про сетку DBGrid
Kostafey © (2006-11-17 10:59:00)Подскажите пожалуйста как сделать так чтобы
1) заголовки столбцов сетки были многострочными.
2) численные значения в сетке автоматически округлялись до 2-х знаков после запятой.
Leonid Troyanovsky (2006-11-20 20:14:00) [1]
> Kostafey © (20.11.06 20:01) [20]
> О! Верно, классная статья ! Спасибо ! На будущее буду знать.
Нет уж.
Будь любезен - познавай сейчас.
--
Regards, LVT.
Kostafey (2006-11-20 20:01:00) [2]> [18] Игорь Шевченко © (20.11.06 11:32)
О! Верно, классная статья ! Спасибо ! На будущее буду знать.
> [19] clickmaker © (20.11.06 11:58)
Ничего не понимаю. Клиент сам посылает запрос серверу сам же ответ получеат.
Другой клиент пусть свой запрос посылает.
У меня задача узкая ухищьрений не требует.
clickmaker (2006-11-20 11:58:00) [3]
> Округление лучше всего делать в самом SQL-запросе (во всяком
> случае SQL Server это поддерживает), например:
> select round((select count(*)/3.0 from LSOSTAV),2) округляет
> значение до 2-х знаков после запятой
не факт. Серверная логика должна быть как можно более абстрактной. Т.е. не должна содержать элементов, явно указывающих на форму отображения данных на клиенте.
Твоему клиенту надо, например, 2 знака, а другому потребуется 4...
Игорь Шевченко (2006-11-20 11:32:00) [4]
> Неужели никто не делал многострочных заголовков DBGrid ?
Делали, даже статью написали.
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=806
Kostafey (2006-11-19 22:09:00) [5]> [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/
Kostafey (2006-11-19 19:00:00) [6]> Делал, не делал, какая разница, раз не отвечают значит так
> надо и не надо спамить.
> Ждите ответа.
Прошу прощения, я просто возврашал вопрос к обсуждению.
Anatoly Podgoretsky (2006-11-19 13:05:00) [7]> Kostafey (19.11.2006 11:54:14) [14]
Делал, не делал, какая разница, раз не отвечают значит так надо и не надо спамить.
Ждите ответа.
Kostafey (2006-11-19 11:54:00) [8]Нет, не получается разобраться.
Неужели никто не делал многострочных заголовков DBGrid ?
Kostafey (2006-11-18 23:46:00) [9]> Там описан наследник визуального компонента 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-18 22:50:00) [10]> http://e-dok.narod.ru/delphi/question1/comp/comp-118.html
Похоже в яблочко, но как же использовать этот код (прошу прощения за ламерство)?
Там описан наследник визуального компонента DBGrid, но как разместить его на форме ?
KilkennyCat (2006-11-18 19:05:00) [11]http://e-dok.narod.ru/delphi/question1/comp/comp-118.html
KilkennyCat (2006-11-18 18:54:00) [12]гм... соврал. на картинку повелся.
KilkennyCat (2006-11-18 18:06:00) [13]если статью прочитать внимательно, то там видно, как сделать наоборот - что бы только в ячейках. В чем сложность инвертировать?
Kostafey (2006-11-18 17:00:00) [14]> 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:00) [15]> 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 столбцов без изменений, зато содеримое всех прочих ячеек запролняется много строчными приветами, хотя и тут не совсем так, ведь высота строки не увеливается (нижних строк просто не видно).
clickmaker (2006-11-17 17:37:00) [16]
> [5] Kostafey © (17.11.06 17:08)
для округления использовать TNumericField.DisplayFormat
Kostafey (2006-11-17 17:08:00) [17]> для округления использовать format()
А что format ? там кроме вставки в текст можно еще что-то делать ?
Да и потом форматировать нужно результаты запроса во свей сетке, а не
конкретное число
> А какой смысл округлять целое до двух знаков после запятой.
Так там в основном числа с дробными значениями у меня.
Anatoly Podgoretsky (2006-11-17 12:00:00) [18]> Kostafey (17.11.2006 11:02:02) [2]
А какой смысл округлять целое до двух знаков после запятой.
KilkennyCat (2006-11-17 11:11:00) [19]для округления использовать format()
Kostafey (2006-11-17 11:02:00) [20]В статье про StringGrid а в DBGrid будет так же ?
А что касается округления ?