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

Вниз

Нумерация строк 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
8-53121
Navi1982
2002-10-25 18:05
2003.02.17
Прозрачная картинка на форме...


1-53017
Dubinushka
2003-02-10 00:57
2003.02.17
Главная форма - в DLL


3-52769
некто2003
2003-01-29 21:42
2003.02.17
Чистое чтение таблиц


1-52918
AndSoft
2003-02-08 19:20
2003.02.17
Дизайн в runtime


1-52998
Tundra
2003-02-10 15:23
2003.02.17
Как убрать мерцание в TScrollBar





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