Текущий архив: 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.48 MB
Время: 0.009 c