Распечатать страницу

Список с различными источниками данных в VFP

« Назад

Демонстрируется список ListBox с различными видами источников данных. Перечень видов источников данных приведен на рис. 10.23.

164.1.-Виды-источников-данных-списков-ComboBox-и-ListBox

Рис. 10.23. Виды источников данных списков ComboBox и ListBox

Создадим форму d:\ListForm.scx, содержащую два списка – ComboBox и ListBox соответственно с именами Combo1 и List1 (рис. 10.24).

164.2.-В-качестве-источника-данных-списка-List1-выбран-SQL

Рис. 10.24. В качестве источника данных списка List1 выбран SQL

Значение свойства RowSourceType списка Combo1 установим равным 1 (вид источника данных – Value), значение свойства RowSource (источник данных) зададим равным строке

"Value,Alias,SQL,QPR,Array,Fields,Files,Structure"

В поле RowSource окна редактирования свойств списка Combo1 приведенная строка вводится без кавычек. Мы же, однако, зададим значение этого свойства в обработчике события Init формы:

This.Combo1.RowSource = "Value,Alias,SQL,QPR,Array,Fields,Files,Structure"

В свойство Value рассматриваемого списка запишем строку "Alias". Тогда при запуске формы будет выбрано одноименное значение списка Combo1.

Для работы с видом источника данных Array добавив в форму новое свойство-массив ListArray[5, 4] (команда меню Form – New Property). В окружение данных формы добавим таблицу Authors базы данных HomeLibrary.

Далее напишем обработчики событий формы и ее элементов управления.

Обработчик события Init формы инициализирует списки Combo1 и List1 и вдобавок устанавливает для списка List1 шрифт Courier.

&& Обработчик события Init формы

with This.Combo1

.RowSourceType = 1          && Инициализация списка Combo1

.RowSource = "Value,Alias,SQL,QPR,Array,Fields,Files,Structure"

.Value = "Alias"

.InteractiveChange              && Инициализация списка List1

endWith

This.List1.FontName = "Courier"

&& Отключаем отображение уровней рашмор-оптимизации

Sys(3054, 0)

Обработчик события InteractiveChange списка Combo1 после выбора в списке Combo1 значения изменяет свойства списка List1, настраивая его на вывод данных источника заданного вида.

&& Обработчик события InteractiveChange списка Combo1 формы ListForm

&&

nColumnCount = 0

cColumnWidths = ""

nWidth = ThisForm.List1.Width

do case

case This.Value = 'Value'

&& Свойство RowSource должно содержать строку с выводимыми данными

&& В качестве разделителя берется запятая

cValue = 'Выбран,вид,Value' && Выводимые в списке List1 данные

case This.Value = 'Alias'

&& Свойство RowSource должно содержать псевдоним открытой таблицы

cValue = 'Authors'

&& Задание количества и ширины столбцов в списке List1

&& для первых 3-х полей таблицы Authors: AuthorId, Author и InputDate

nColumnCount = 3

nWidth = ThisForm.List1.Width

cColumnWidths = '0' + ',' + Transform(0.7 * nWidth, '999') + ',';

     + Transform(0.3 * nWidth, '999')

case This.Value = 'SQL'

&& Свойство RowSource должно содержать текст запроса

&& Результат см. на рис. 10.24

cValue = 'select Author, InputDate from Authors where AuthorId < 10 into cursor Cur'

nColumnCount = 2

cColumnWidths = Transform(0.7 * nWidth, '999') + ',' + Transform(0.3 * nWidth, '999')

case This.Value = 'QPR'

&& Свойство RowSource должно содержать имя QPR-файла

cValue = 'd:\ListFormQPR.qpr'

nColumnCount = 2

cColumnWidths = Transform(0.7 * nWidth, '999') + ',' + Transform(0.3 * nWidth, '999')

case This.Value = 'Array'

&& Свойство RowSource должно содержать имя массива

for i = 1 to Alen(ThisForm.ListArray, 1)

    for j = 1 to Alen(ThisForm.ListArray, 2)

  ThisForm.ListArray[i, j] = i

    next

next

cValue = 'ThisForm.ListArray'

&& Число столбцов в массиве ThisForm.ListArray

nColumnCount = Alen(ThisForm.ListArray, 2)

case This.Value = 'Fields'

&& Свойство RowSource должно содержать список отображаемых полей

cValue = 'Author,InputDate'

nColumnCount = 2

cColumnWidths = Transform(0.7 * nWidth, '999') + ',' + Transform(0.3 * nWidth, '999')

case This.Value = 'Files'

&& Свойство RowSource должно содержать маску для отображаемых файлов

cValue = 'd:\*.SCX'

case This.Value = 'Structure'

&& Свойство RowSource должно содержать псевдоним открытой таблицы,

&& структура которой будет выведена в списке List1

cValue = 'Authors'

endcase

&&

&& Новые значения свойств списка List1

with ThisForm.List1

.ColumnCount = nColumnCount

.ColumnWidths = cColumnWidths

&& Для корректной смены вида источника данных установим прежде

&& значение RowSourceType в 0

.RowSourceType = 0

.RowSource = cValue

.RowSourceType = This.ListItemId

endWith