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

Вниз

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

 
kaif   (2003-01-31 14:01) [0]

Часто нужно бывает поддерживать простую нумерацию строк, например, если редактируется документ типа накладной.
Здесь есть 2 решения:
1. Ввести поле где-то на сервере - в саму таблицу или нумеровать записи при каждом Fetch с помощью хранимой процедуры или еще каких-то серверных средств (такого типа средства есть в MSSQL).
2. Ввести вычисляемое поле на уровне TDataSet и вписать в обработчик OnCalcFields что-то вроде DataSet.FieldByName("N").AsInteger := DataSet.RecNo;
--------------
Однако проблема состоит в следующем. Как наилучшим образом перенумеровать строки, если юзер удалил строку? В обоих случаях придется перезапросить весь набор. Я понимаю, почему это так в 1-м случае. Но зачем перезапрашивать набор во 2-м случае? К сожалению, не предусмотрено никакого метода в TDataSet, могущего вызвать перерасчет всех ftCalculated полей для всего набора. По крайней мере, я такого метода не нашел...
Допустим, даже, я вызову DisableControls, пройдусь по набору и руками присвою новые значения вычисляемому полю. Но это приведет к возникновению событий редактирования (Post), что совершенно нежелательно. Можно ради этого использовать CachedUpdates, отказавшись от самих Updates, и в общем... и так постепенно отказыватья от функциональности DataSet как такового.
--------------
Кто знает наилучшее решение?


 
Danilka   (2003-01-31 14:08) [1]

если нумерация строк нужна только для отображения в гриде, то может просто сделать пустой столбец, и рисовать в нем самому что-то по событию: OnDrawColumnCell


 
kaif   (2003-01-31 14:27) [2]

2 Danilka © (31.01.03 14:08)
Мне эта идея нравится. Но неужели нет другого решения?


 
MsGuns   (2003-01-31 15:35) [3]

OnGetText для любого НЕОТОБРАЖАЕМОГО поля НД, куда пишешь:
Text := IntToStr(TIDataSet1.RecNo);

Далее после любой "перетряски" НД номера пересчитываеются автоматически.


 
MsGuns   (2003-01-31 15:39) [4]

Поправка к MsGuns © (31.01.03 15:35)
Поле, конечно, должно быть связано с колонкой грида (скорее всего, с самойлевой). Под словом "Неотображаемого" я понимал то, что данные этого поля не нужны в гриде. Хотя можно использовать для этих целей и калькулируемое поле.


 
Sergey13   (2003-01-31 18:12) [5]

2kaif © (31.01.03 14:01)
Можно попробовать таблицф в памяти, типа RxMemoryData. Копируешь туда датасет, добавляешь свое поле, нумеруешь и вперед. При этом конечно слегка усложнится обратная связь.
Но для документа типа накладной, ИМХО, имеет смысл держать реальное поле в базе.


 
Anatoly Podgoretsky   (2003-01-31 18:28) [6]

Нафиг тебе нужны номера в гриде, другое дело в накладной, а там для этого есть все средства.



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

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

Наверх




Память: 0.45 MB
Время: 0.009 c
4-53343
FoXx
2003-01-05 17:12
2003.02.17
Sniffer - Все написал, все работает, вот только....


1-52894
Strumpf
2003-02-08 11:33
2003.02.17
Очень простой вопрос


1-52931
bios
2003-02-08 01:38
2003.02.17
getdir


1-52822
Checist [root]
2003-02-07 10:57
2003.02.17
Запись в файл


1-52970
Le!
2003-02-10 08:11
2003.02.17
Подскажите!





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