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

Вниз

Проблема при вводе данных ! Поделитесь экспириенсом   Найти похожие ветки 

 
MsGuns ©   (2002-09-06 12:55) [0]

При редактировании/добавлении датасетов юзерам очень удобно переносить в текущую запись содержимое этого же поля из передыдущей (верхней в гриде). Пример

Запись Поле 1 Поле2
---------------------------------------------------------------
n-1 6.09.02 Процессор Celeron 800 Mh
> n 6.09.02 Процессор Celeron 900 Mh

Ясно, что вводить наименование процессора каждый раз утомительно, очеь удобно по Short-Cut`у или кнопке сначала копировать из поля сверху, а потом просто слегка откорректровать.
Но как это сделать, не вызывая события постирования, особенно для датасетов с ключами ?
Я эту проблему решил, но по моему мнению коряво:
1. Для режима Edit при <ключевые поля>.ReadOnly := true:
- Post обновляемой записи.
- ds.Prior
- newval (Variant) := <текущее поле>.Value
- ds.Next
- <текущее поле>.Value := newval (Variant)
Недостаток: метод Cancel не "срабатывает" в полном объеме, да и "лазание" по датасету мне не нравится. (особенно если учесть, что не для всех БД это возможно
2. Для режима Insert
- В обработчике BeforeInsert создается маасив вариантов по числу видимых полей ds и туда в цикле "закачаваются" содержимое всех полей тек.записи.
- Insert срабатывает не "перед", а "после" текущей записи
- при нажатии фишки "Копи" определяется индекс текущего поля в списке видимых полей ds, по этому индексу в массиве вариантов ищется значение и присваивается полю новой записи
Недостатки: вставка "после", время (на медленных компах тормозит заметно для глаза), громоздкость и некрасивость метода.

Резюме Интуиция мне посказывает, что это можно сделать проще, причем значительно ! Но вот до сих пор не сообразил :-(
Думаю, что многим из вас приходилось решать подобную задачку. Буду весьма признателен всем, кто поделится опытом.


 
Val ©   (2002-09-06 13:26) [1]

как вариант:
создаем record c аналогами полей НД. чекбокс cbClone.
в BeforeInsert:
if cbClone.Checked then перенос значений из активной записи в record;
в AfterInsert:
if cbClone.Checked then перенос из record в активную запись.


 
Mike Kouzmine   (2002-09-06 13:53) [2]

Я делаю стандартно - Ctrl-C Ctrl-V. Только перед вставкой нажимать надо F2


 
MsGuns ©   (2002-09-06 13:54) [3]

>Val © (06.09.02 13:26)
Спасибо за ответ, но..
>создаем record c аналогами полей НД.
Ну а я создаю массив. Не вижу существенной разницы. Более того,
создание (динамическое) TRecord несколько громозче по тексту.
>if cbClone.Checked then перенос из record в активную запись.
Не совсем понял. Переносить надо не автоматически ВСЕ поля, а по команде Юзера и одно конкретное поле (текущее)
И совсем не понятно, зачем тут чекбокс.

А самое, главное, не решена проблема избежания постирования в Edit-режиме.

Но за совет благодарен !>)



 
MsGuns ©   (2002-09-06 13:57) [4]

Mike Kouzmine (06.09.02 13:53)
>Я делаю стандартно - Ctrl-C Ctrl-V. Только перед вставкой >нажимать надо F2

Не проходит априори, т.к. для этого самого Ctrl+C надо переместиться в пред.запись, тут-то и возникает та самая проблема (POST).


 
Mike Kouzmine   (2002-09-06 13:59) [5]

при AfterInsert пост не вызывается, поэтому есть время отредактировать и самому запостить. А идея с CheckBoxом самая правильное.
>Не совсем понял. Переносить надо не автоматически ВСЕ поля, а по команде Юзера и одно конкретное поле (текущее)
Так и переноси то что надо в AfterInsert.


 
Val ©   (2002-09-06 14:03) [6]

1.массив вариантов - зачем, если вы знаете структуру таблицы? Не расточительно ли?
2. чекбокс включает/выключает режим клонирования записи, ведь не всегда юзеру он нужен? Про то что вам нужно конкретное поле не понял, но исправить несложно - будет даже красивее - при включенном режиме клонирования показываете пользователю чеклистбокс, в котором он уже сам отмечает, какие поля ему нужно клонировать. алгоритм остается прежним, только анализируете выбор юзера и переносите значения отмеченных полей.


 
MsGuns ©   (2002-09-06 14:29) [7]

>Val
Идея с чекбоксом принимается как вариант. Что-то в этом, наверное, есть. Надо попробовать, что скажут юзера ?
Если можно, дайте сампл работающего проекта.


 
Val ©   (2002-09-06 14:52) [8]

>MsGuns © (06.09.02 14:29)
Если можно, дайте сампл работающего проекта.
о как, вы ли это, Сергей???
хорошо, в понедельник попытаюсь раскопать у себя, где-то такая штуковина была.



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

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

Наверх




Память: 0.49 MB
Время: 0.01 c
4-85743
Super-Mario
2002-08-09 10:54
2002.09.26
Перехват сообщения


14-85663
Driverrr
2002-08-30 20:33
2002.09.26
Диррективы компилятора


14-85690
DeepProg
2002-08-31 14:54
2002.09.26
И снова о лит-ре


3-85308
id_privin
2002-09-02 19:15
2002.09.26
как заставить IBDataSet выглядеть как OracleDataSet


3-85331
maxim2
2002-09-04 13:41
2002.09.26
Копировать все записи из таблицы в тхт файл.