Форум: "Начинающим";
Текущий архив: 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.037 c