Список с различными источниками данных в VFP
« Назад Демонстрируется список ListBox с различными видами источников данных. Перечень видов источников данных приведен на рис. 10.23. Рис. 10.23. Виды источников данных списков ComboBox и ListBox Создадим форму d:\ListForm.scx, содержащую два списка – ComboBox и ListBox соответственно с именами Combo1 и List1 (рис. 10.24). Рис. 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 |