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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
14-95962
Извращенец
2002-08-04 17:45
2002.08.29
кляк!!!


4-96027
Behemoth
2002-06-20 13:45
2002.08.29
Как заставить работать user.exe под WinXP


3-95641
MikeFW
2002-08-07 11:31
2002.08.29
Можно ли избавиться от BDE и ODBC?


4-96024
v0id
2002-06-25 22:04
2002.08.29
Внедрение DLL


3-95725
jessis
2002-08-09 14:17
2002.08.29
TDBGrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский