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

Вниз

Нумерация записей   Найти похожие ветки 

 
Dim!S   (2002-08-07 07:19) [0]

Уважаемые мастера, подскажите, пожалуйста, как в TDBGrid вывести номера записей в отфильтрованном наборе. Без фильтра это сделать легко (Поле вычисляемое создаем Table1Rec := Table1.RecNo). А в отфильтрованном НД нумерация скачет.
Спасибо.


 
Johnmen ©   (2002-08-07 09:53) [1]

Существует масса извращений на данную тему.
Подумай, может вообще отказаться от затеи, как не имеющей никакой смысловой нагрузки.


 
VAleksey ©   (2002-08-07 10:12) [2]

надо бы отказаться, но иногда надо. :))
> Dim!S
узнаешь как скинь мне на мыло.


 
Johnmen ©   (2002-08-07 10:21) [3]

>VAleksey © (07.08.02 10:12)
>надо бы отказаться, но иногда надо. :))

Очень хотелось бы услышать резоны.




 
Mike Kouzmine   (2002-08-07 11:01) [4]

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids;

type
TForm1 = class(TForm)
Table1: TTable;
Table1SCLAD: TStringField;
Table1GROUP: TStringField;
Table1NNUM: TStringField;
Table1ED: TStringField;
Table1NAME: TStringField;
Table1KOLSCLAD: TFloatField;
Table1MESTOSCLAD: TStringField;
Table1KOLZAL: TFloatField;
Table1MASTOZAL: TStringField;
Table1KOLTEK: TFloatField;
Table1PRICE: TFloatField;
Table1COUNTRY: TStringField;
Table1GTD: TStringField;
Table1OPRIH: TFloatField;
Table1NUMREC: TIntegerField;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure Table1AfterOpen(DataSet: TDataSet);
procedure Table1CalcFields(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
Cn: Integer;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Table1AfterOpen(DataSet: TDataSet);
begin
Cn := 0;
Table1.Filtered := True;
end;

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
Inc(Cn);
Table1NUMREC.Value := Cn;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Open;
end;

end.


 
Mike Kouzmine   (2002-08-07 11:03) [5]

Вдогонку. Отслеживай события и обнуляй Cn. Но как и Johnmen не вижу в этом смысла. Единственное применение этого в отчетах, но там есть свои способы


 
fnatali ©   (2002-08-07 11:07) [6]

>Johnmen © (07.08.02 10:21)
Я тут как-то в чате тоже пыталась выяснить необходимость такого подхода. Был приведён один резон (вполне имеющий право на существование, но я бы так делать не стала) - показывать пользователю "запись 4 из 200" для того, чтобы он мог ориентироваться какую часть работы он выполнил. Можно предложить решить задачу двумя вариантами - или через вычисляемое поле (пересчитывать после наложения фильтра), или отказаться от фильтра и сделать запросом с ограничением where ... и пронумеровать записи в запросе. По-моему оба способа не оптимальны. И я, например, с тобой совершенно согласна, что это избыточность, к тому же малопривлекательно и неизящно реализуемая.


 
Johnmen ©   (2002-08-07 11:13) [7]

>Mike Kouzmine (07.08.02 11:01)

>fnatali © (07.08.02 11:07)
>через вычисляемое поле

Да не будет так работать ! :)))

>fnatali © (07.08.02 11:07)
>сделать запросом с ограничением where ... и пронумеровать
>записи в запросе

С моей точки зр. это наиболее подходящее решение.


 
Mike Kouzmine   (2002-08-07 11:16) [8]

У меня работает.


 
Johnmen ©   (2002-08-07 11:24) [9]

>Mike Kouzmine (07.08.02 11:16)

Корректно работает ? При перемещении с пом.DBGrid"а ?
Не может того быть ! :)))))))))))



 
Mike Kouzmine   (2002-08-07 11:32) [10]

Попробуй


 
Mike Kouzmine   (2002-08-07 11:39) [11]

При смене направления сбивается нумерация, но это можно поправить, отследив событие, я согласен, что это per rectum, но что делать если человеку надо, пусть думает.


 
Johnmen ©   (2002-08-07 11:47) [12]

>Mike Kouzmine (07.08.02 11:39)

В том то и дело. Поскольку OnCalcFields вызывается каждый раз, когда необходимо перерисовать отображение этого поля...


 
3JIA9I CyKA ©   (2002-08-07 11:52) [13]

2Mike Kouzmine
А что, в RX ничего для этого нету?


 
Mike Kouzmine   (2002-08-07 11:59) [14]

Мочи ссучившихся! :) Если серьезно - есть идеи?


 
3JIA9I CyKA ©   (2002-08-07 12:14) [15]

Пока нету.
В смысле есть, но не отличающиеся от Johnmen © (07.08.02 09:53)


 
Mike Kouzmine   (2002-08-07 14:40) [16]

Что интересно - работает

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, ADODB, StdCtrls, Mask, DBCtrls,
dbcgrids;

type
TForm1 = class(TForm)
Table1: TTable;
Table1SCLAD: TStringField;
Table1GROUP: TStringField;
Table1NNUM: TStringField;
Table1ED: TStringField;
Table1NAME: TStringField;
Table1KOLSCLAD: TFloatField;
Table1MESTOSCLAD: TStringField;
Table1KOLZAL: TFloatField;
Table1MASTOZAL: TStringField;
Table1KOLTEK: TFloatField;
Table1PRICE: TFloatField;
Table1COUNTRY: TStringField;
Table1GTD: TStringField;
Table1OPRIH: TFloatField;
Table1NUMREC: TIntegerField;
DataSource1: TDataSource;
Label1: TLabel;
DBGrid1: TDBGrid;
procedure Table1AfterOpen(DataSet: TDataSet);
procedure Table1CalcFields(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
procedure DataSource1DataChange(Sender: TObject; Field: TField);
private
{ Private declarations }
public
Cn: Integer;
RECNO: Integer;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Table1AfterOpen(DataSet: TDataSet);
begin
Cn := 0;
RECNO := 0;
Table1.Filtered := True;
end;

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
if RECNO < Table1.RecNo then
Inc(Cn)
else
Dec(Cn);
Table1NUMREC.Value := Cn;
RECNO := Table1.RecNo;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Open;
end;

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
Cn := Table1NUMREC.Value;
end;

end.



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

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

Наверх




Память: 0.5 MB
Время: 0.011 c
14-95939
Сатир
2002-08-02 13:41
2002.08.29
Поздравляю с успешным переездом


1-95806
ErmSergey
2002-08-20 09:29
2002.08.29
Определение позиции символа над которым находится указатель мыши


3-95708
billybons
2002-08-09 08:28
2002.08.29
не работает фильтр


7-95995
vap
2002-06-20 00:03
2002.08.29
Как получить адрес bitmap a экрана


4-96031
eruc
2002-06-26 16:23
2002.08.29
Application with taskbar interface