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

Вниз

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

 
m_i_p   (2006-11-03 08:07) [0]

помогите плиз,
необходимо в DbGrid отобразить номера строк, как например это сделано в Excel


 
ЮЮ ©   (2006-11-03 08:26) [1]

В экселе в натуре 65536 строк. А в гриде не больше того, что может войти в грид.
Сделай в DataSete calculated поле, в котором присваивай DataSet.RecNo и выведи его в грид. Или отрисовывай в гриде сам DataSet.RecNo.
P.S. Только с фильтрацией, если используешь, придется расстаться
P.P.S. А оно вообще нало? Что этот номер может дать кому-то полезного?


 
Anatoly Podgoretsky ©   (2006-11-03 08:46) [2]

> ЮЮ  (03.11.2006 08:26:01)  [1]

Может, тетя Люба подерется с тетей Валей.
Например так: ты что дура в строке 6 сумма к оплате 500, сама дура там 750


 
evvcom ©   (2006-11-03 11:00) [3]

> [2] Anatoly Podgoretsky ©   (03.11.06 08:46)

А потом вместе пойдут бить морду программисту. :-)


 
Павел Калугин ©   (2006-11-03 11:06) [4]

можно пронимеровать результат выдачи например так:

select a.au_lname+" "+ a.au_fname as author,
       phone,
       (select count(*)
         from authors b
        where  b.au_lname+" "+ b.au_fname <= a.au_lname+" "+ a.au_fname
       ) As RowNumber
from authors a

order by author

но, вопрос в том для чего оно?
в гриде, мое мнение,  это излишество.
в некоторых отчетах  - необходимость.


 
Sergey13 ©   (2006-11-03 11:09) [5]

> [4] Павел Калугин ©   (03.11.06 11:06)
> в некоторых отчетах  - необходимость.
Некоторые, если не все, репортеры с успехом нумеруют сами.


 
Павел Калугин ©   (2006-11-03 11:37) [6]

> [5] Sergey13 ©   (03.11.06 11:09)

Некоторые - да.
а вот большинство  - нет.
Ибо в большинстве отчет это просто текстовый файл, в формате указанном заказчиком по каналам электронной связи передаваемый всяким контролерамю.
или rtf формат по почте электрияеской клиентам рассылаемый.
а в частности можно и в Кристале красивости рисовать.


 
Johnmen ©   (2006-11-03 11:42) [7]


> Павел Калугин ©   (03.11.06 11:37) [6]
> Некоторые - да. а вот большинство  - нет.


Я вот скажу, что все репортёры нумеруют сами. Если, конечно же, их попросить.


 
Павел Калугин ©   (2006-11-03 12:05) [8]

> [7] Johnmen ©   (03.11.06 11:42)

умеют, кто бы спорил...
но большинство отчетов которые я видел  - в TMemo собираем текст и SaveToFile его.


 
Stanislav ©   (2006-11-03 12:22) [9]

а в MSSQL 2005 есть спец. фнкция.


 
Кщд ©   (2006-11-03 12:57) [10]


> а в MSSQL 2005 есть спец. фнкция.

row_number


 
Anatoly Podgoretsky ©   (2006-11-03 13:16) [11]

> evvcom  (03.11.2006 11:00:03)  [3]

Вот это то и обидно, а ведь уверяли, что без этих номеров жить не могут.


 
Anatoly Podgoretsky ©   (2006-11-03 13:17) [12]

> Sergey13  (03.11.2006 11:09:05)  [5]

А ведь не для отчетов просят.


 
Anatoly Podgoretsky ©   (2006-11-03 13:18) [13]

> Кщд  (03.11.2006 12:57:10)  [10]

Которая полетит к черту при локальной сортировке/фильтрации


 
Кщд ©   (2006-11-03 13:19) [14]


>        (select count(*)
>          from authors b
>         where  b.au_lname+" "+ b.au_fname <= a.au_lname+"
> "+ a.au_fname
>        ) As RowNumber

это даже на индекс не встанет
если очень хочется, то лучше, имхо, так:
create table #temp (id int, name varchar(100))
select identity(int, 1, 1) as id, t.name into #temp from sometable t


 
Кщд ©   (2006-11-03 13:22) [15]


> Которая полетит к черту при локальной сортировке/фильтрации

разумеется
просто способ получить пронумерованный набор с сервера


 
Павел Калугин ©   (2006-11-03 13:27) [16]

> [14] Кщд ©   (03.11.06 13:19)

Ну, если можно ХП написать и табличку создать то проще сразу создавать с полем RowMo identyty(1,1) и вставлять туда набор данных.
Но, мое мнение, что не создавая ХП вложить всесь этот процесс в TDataSet несколько хлопотно. поздзапрос проще.


 
sniknik ©   (2006-11-03 13:42) [17]

> Но, мое мнение, что не создавая ХП вложить всесь этот процесс в TDataSet несколько хлопотно. поздзапрос проще.
а ты читал то на что отвечаешь? показанные там 2 строчки это и есть все "хлопоты", не показана третья с непосредственно выборкой, ну и удаление темповой тоже желательно. но это все, и гораздо проще чем еще ХП туда притягивать.

вообще на http://sql.ru гдето есть статься по этой нумерации, рассмотрено гдето 6-8 способов... и их недостатки.


 
evvcom ©   (2006-11-03 14:02) [18]

Да к DataSet вообще можно ничего не прикручивать. Автор же про DbGrid говорит. Простейший OnCustomDrawCell и никакой зависимости от недостатков row_num, row_number и им подобных.


 
Johnmen ©   (2006-11-03 14:31) [19]


> evvcom ©   (03.11.06 14:02) [18]
> Да к DataSet вообще можно ничего не прикручивать. Автор
> же про DbGrid говорит. Простейший OnCustomDrawCell ....


С этого места поподробней :)


 
Павел Калугин ©   (2006-11-03 16:06) [20]

> [17] sniknik ©   (03.11.06 13:42)

естественно читал
В гриде отобразить можно что?
да хоть черта лысого. Особенно просто его отобразитиь если этот черт - набор данных
остается получить его в наборе данных.


 
Кщд ©   (2006-11-03 17:52) [21]


> остается получить его в наборе данных.

посчитайте во сколько table scan это выльется
лучше уж никак, чем таким запросом...


 
Павел Калугин ©   (2006-11-03 17:53) [22]

> [21] Кщд ©   (03.11.06 17:52)


> [17] sniknik ©   (03.11.06 13:42)
вообще на http://sql.ru гдето есть статься по этой нумерации, рассмотрено гдето 6-8 способов... и их недостатки.


 
Кщд ©   (2006-11-03 18:45) [23]


> Павел Калугин ©   (03.11.06 17:53) [22]

там где-либо предлагают совершить N table scan, где N - кол-во записей в выборке? :)


 
MsGuns ©   (2006-11-04 01:49) [24]

Засстерилитсья ! Сколько "вумных" советов и критики, и ни одного толкового совета.

TField.OnGetText(event):

 Text := IntToStr(Sender.DataSet.RecNo);\

и все..


 
Дмитрий Белькевич ©   (2006-11-04 02:40) [25]

В качестве глупой идеи: т.к. к таблицам часто инкрементные поля - юиды добавляют, может эти юиды и показывать? Тогда пофиг фильтр/сортировка - всегда однозначность гарантирована, да и никакой дополнительной возни, только поле таблицы показать.


 
Anatoly Podgoretsky ©   (2006-11-04 11:02) [26]

> MsGuns  (04.11.2006 1:49:24)  [24]

> Text := IntToStr(Sender.DataSet.RecNo);

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


 
Anatoly Podgoretsky ©   (2006-11-04 11:03) [27]

> Дмитрий Белькевич  (04.11.2006 2:40:25)  [25]

> всегда однозначность гарантирована

А кто просил одназначность, одназначно реализуется с помощью первичных
ключей.


 
MsGuns ©   (2006-11-04 12:05) [28]

>Anatoly Podgoretsky ©   (04.11.06 11:02) [26]
>И это тоже самое, это самое слово. Можно дать только от не понимания
технологий работы с базами.

Сабж нетрудно перечитать, всепонимающий Вы наш ?
;)))


 
Anatoly Podgoretsky ©   (2006-11-04 12:11) [29]

> MsGuns  (04.11.2006 12:05:28)  [28]

Наоборот, непонимающий Вы наш


 
evvcom ©   (2006-11-07 09:24) [30]

> [19] Johnmen ©   (03.11.06 14:31)

OnCustomDrawCell я, конечно, погорячился. Из DevExpress этот обработчик. А для DBGrid вот:
procedure TMyForm.DBGrid1DrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;
 State: TGridDrawState);
begin
 inherited;
 if Column.FieldName = "" then
   DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, IntToStr(MyDataSet.RecNo));
end;

Мог бы и провести аналогию имен :)



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

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

Наверх




Память: 0.54 MB
Время: 0.06 c
15-1168402510
Slider007
2007-01-10 07:15
2007.01.28
С днем рождения ! 10 января


15-1168438608
vasIzmax
2007-01-10 17:16
2007.01.28
"...свиные консервы..." :)


2-1168424847
RomanH
2007-01-10 13:27
2007.01.28
Заголовок DBGrid а


2-1168676948
_Dima
2007-01-13 11:29
2007.01.28
(Fatal error) Project 1.dpr(1): Unit not found: System.pas


2-1168583532
Roma L
2007-01-12 09:32
2007.01.28
MDIChild окно в DLL