» Главная
eXcode.ru » Статьи » Базы данных
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 5





Проблема источника строк списка в ленточной форме




Автор: Dmitry Shakhov

Те, кто предпочитает работать с ленточными формами наверняка сталкивались с такой проблемой: источник строк списка должен зависеть от какого-то поля в данной строке. Хороших решений эта проблема не имеет.

Типичное решение выглядит так: на вход в список вешаем событие, в которое включаем обрезку целого списка по условию. На выходе из списка другое событие - возвращаем полный источник. Т.е.

На вход:


Me.List.RowSource = "SELECT * FROM TABLE WHERE id = " & Me.Field
Me.List.Requery


На выход:


Me.List.RowSource = "SELECT * FROM TABLE"
Me.List.Requery



На практике происходит следующее. При входе в остальных строках в списке внезапно пропадает инфа. Т.е. поля со списками в других строках становятся пустыми - конечно, на самом деле ничего не пропадает, просто источник строк изменился и в остальных строках (элемент-то управления у нас один на всю форму) и поле со списком не может в других строках подобрать в своем источнике нужную строку для указанного кода. При выходе информация снова появляется в списках.

Налицо проблема, исчезновение информации может ввергнуть юзера в шок. Что делать? Я придумал такой выход. Лучшим его назвать язык не повернется, но он прост и не загружает процессор.)

Фактически это дополнение к описанному методу. Делаем в таблице поле "nmList". Это поле будет выполнять роль временного хранителя данных.
Теперь делаем запрос, который будет обновлять это поле перед входом в форму: нам же известен код, который и определяет строку в поле со списком. Вот в nmList мы помещаем текстовую часть, которая скрывается за кодом.

Следующий шаг, дизайн формы. Стягиваем поле со списком вправо до размеров кнопки раскрывающей список. Прилепляем к этой кнопке текстовое поле nmList. Теперь у нас как будто полноценное поле со списком.

Дальше, на обновление списка вешаем


Me.nmList = Me.List.Column(1) ′Это если видимая часть во втором столбце


Ну чтобы было совсем хорошо, на обновление nmList стоит повесить


If IsNull(Me.nmList) OR Len(CStr(Me.nmList)) = 0 Then
Me.List=Null
End if


Т.е. если юзер обнулит текстовое поле, нам надо обнулить и список. Дерзайте.)
К началу статьи





Добавил: LedWormДата публикации: 2005-07-16 20:15:45
Рейтинг статьи:3.00 [Голосов 5]Кол-во просмотров: 16206

Комментарии читателей

Всего комментариев: 0
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Как вы относитесь к интернет-магазинам?
Не доверяю
18% (16)
Ни разу не пользовался и не буду
16% (15)
Пользовался единожды
12% (11)
Пользуюсь регулярно
26% (24)
Пользовался бы, но нет денег
18% (16)
А что такие бывают?
2% (2)
Обычные магазины лучше!
8% (7)

Проголосовало: 91
Программа, позволяющая сэкономить деньги на интернет-соединениях. Установите программу. Запустите, перейдите на вкладку "Настройки", введите в поля тарифы вашего провайдера, нажмите кнопку "Ок". В появившемся диалоговом окне выберите пункт меню "Сжечь модем".
Рейтинг: 7.5/10 (4)
Посмотреть все анекдоты