Форум: "Базы";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];
ВнизПроблема при вводе данных ! Поделитесь экспириенсом Найти похожие ветки
← →
MsGuns (2002-09-06 12:55) [0]При редактировании/добавлении датасетов юзерам очень удобно переносить в текущую запись содержимое этого же поля из передыдущей (верхней в гриде). Пример
Запись Поле 1 Поле2
---------------------------------------------------------------
n-1 6.09.02 Процессор Celeron 800 Mh
> n6.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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.055 c