Когда вы желаете заполнить списки элемента управления ListBox или ComboBox элементами или значениями, установите его свойство RowSource для указания источника элементов или значений, а также установите свойство RowSourceType для идентификации типа источника данных такого, как, например, массив или таблица.

NoteСовет

Рекомендуется, чтобы вы устанавливали свойство RowSourceType до установки свойства RowSource для определения источника, который может быть использован элементом управления. Для гарантии того, что элемент управления отображает наиболее свежие элементы или значения, используйте метод Requery в событии Init, например, This.Requery().

NoteЗамечание

Когда вы устанавливаете значение свойства RowSource в программном коде, вы должны заключить значение в кавычки ("").

Когда свойство ColumnCount установлено в 0 или 1, элемент управления отображает первый элемент или значение только в одной колонке. В противном случае, элемент управления отобразит каждый элемент или значение в колонках, число которых определяется ColumnCount. Вы можете, кроме того, установить свойство ColumnWidths для увеличения ширины элемента управления с тем чтобы правильно отобразить элементы списка или значения.

В этой статье содержатся примеры, которые показывают способы, с помощью которых вы можете установить RowSourceType и RowSource в зависимости от выбранного вами источника значений. Ниже приведен список возможных типов источника данных для списка:

Детальное описание типов источников данных, источниках, которые вы можете указать, и то, как ColumnCount влияет на заполнение списка элемента управления для каждого типа источника приведено в описаниях свойств RowSourceType и RowSource.

С целью детального изучения вместе с Visual FoxPro поставляются перечисленные ниже примеры, в которых используются свойства RowSourceType и RowSource:

Без источника

Вы можете заполнить список элемента управления Listbox или Combobox не указывая источник или тип источника.

Для заполнения элемента управления без указания источника

  1. Установите свойство RowSourceType в значение 0 - None (Нет).

    None представляет собой значение по умолчанию и не производит автоматического заполнения элемента управления.

  2. Используйте методы AddItem, AddListItem, свойства List или ListItem для ввода значений или элементов в элемент управления.

Например, приведенные ниже строки кода устанавливают RowSourceType в 0 для указания, что источника нет и для добавления трех элементов в listbox с именем lstMyListBoxmethod, расположенный на форме с именем frmForm1, использует метод AddItem

 CopyCode imageСкопировать код
frmForm1.lstMyListBox.RowSourceType = 0
frmForm1.lstMyListBox.AddItem("First Item")
frmForm1.lstMyListBox.AddItem("Second Item")
frmForm1.lstMyListBox.AddItem("Third Item")

Listbox отображает элементы "First Item", "Second Item" и "Third Item". Для получения более подробной информации смотрите Метод AddItem (Visual FoxPro), Метод AddListItem, Свойство List и Свойство ListItem.

Для удаления элементов из списка, используйте метод RemoveItem. Например, следующая строка кода удаляет второй элемент , "Second Item", из listbox:

 CopyCode imageСкопировать код
frmForm1.lstMyListBox.RemoveItem(2)

Для получения более подробной информации смотрите Метод RemoveItem.

Тип источника - Значение

Вы можете заполнить элемент управления listbox или combobox списком индивидуальных значений.

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

  1. Установите свойство RowSourceType в значение 1 (Value - Значение).

  2. Установите свойство RowSource указанием значений в виде разделенного запятыми списка, без использования пробелов между значениями и запятыми.

Например, приведенные ниже строки кода устанавливают RowSourceType в 1 для указания, что источник представляет собой разделенный запятыми список значений и указывает список разделенных запятыми значений, заключенный в кавычки ("") для свойства RowSource:

 CopyCode imageСкопировать код
Form1.lstMyList.RowSourceType = 1
Form1.lstMyList.RowSource = "one,two,three,four"

Тип источника - Alias

Вы можете заполнить элемент управления listbox или combobox значениями из одного или более полей в открытой таблице указанием ее псевдоимени.

Для заполнения элемента управления значениями из одного или более полей с помощью псевдоимени таблицы

  1. Установите свойство RowSourceType в значение 2 (Table alias - Псевдоимя таблицы).

  2. Укажите в свойстве RowSource псевдоимя таблицы.

Например, приведенные ниже строки кода устанавливают RowSourcetype в 2 для указания, что в качестве источника будет использоваться таблица, идентифицируемая по ее псевдоимени Customers, и указывают "Customers" в качестве псевдоимени таблицы для свойства RowSource:

NoteСовет

Перед исполнением кода убедитесь, что таблица открыта.

 CopyCode imageСкопировать код
OPEN DATABASE (HOME(2)+"Northwind\Northwind")
Form1.lstMyList.RowSourceType = 2
Form1.lstMyList.RowSource = "Customers"

Свойство ColumnCount определяет число полей, которые будут использоваться для заполнения списка элемента управления значениями. Когда ColumnCount установлено в 0 или 1, элемент управления отображает значения из первого поля в таблице. Когда ColumnCount установлено в значение большее чем 1, элемент управления отображает значения из полей таблицы начиная с первого и вплоть до номера, указанного в ColumnCount. Например, если свойство ColumnCount установлено в 3, элемент управления отображает значения из первых трех полей таблицы.

NoteЗамечание

Когда RowSourceType равен 2 (Table alias - Псевдоимя таблицы) или 6 (Fields - Поля), указатель записи таблицы перемещается к записи, содержащей значение выбранное пользователем в списке.

Тип источника - SQL Statement

Вы можете заполнить элемент управления listbox или combobox значениями курсора или таблицы, созданных предложением SQL, таким, как SQL SELECT.

Для заполнения элемента управления значениями из предложения SQL

  1. Установите свойство RowSourceType в значение 3 (SQL statement).

  2. Установите RowSource, указав предложение SQL SELECT.

NoteСовет

По умолчанию в Visual FoxPro, предложения SQL SELECT без ключевого слова INTO немедленно отображают результирующий курсор в окне просмотра (browse window). Для получения более подробной информации смотрите Browse Window. Советуем вам включить опцию INTO CURSOR в вашем предложении SQL SELECT для того, чтобы избежать отображения окна просмотра.

Например, приведенные ниже строки кода устанавливают свойство RowSourceType в значение 3, что указывают, что источником данных является курсор или таблица, созданная предложением SQL и определяют предложение SQL SELECT для свойства RowSource, которое выберет все поля и все записи из таблицы Customers, размещенной в образцовой базе данных Northwind ( в каталоге ..\Samples\Northwind), в курсор с именем myCursor:

 CopyCode imageСкопировать код
OPEN DATABASE (HOME(2)+"Northwind\Northwind")
Form1.lstMyList.RowSourceType = 3
Form1.lstMyList.RowSource = "SELECT * FROM Customers INTO CURSOR myCursor"

Для получения более подробной информации о предложениях SQL SELECT смотрите Команды SELECT - SQL.

Тип источника - Query

Вы можете заполнить элемент управления Listbox или Combobox результатами из запроса, который вы могли создать в Конструкторе запроса (Query Designer) и сохранить в файле запроса (.qpr). Для получения более подробной информации о запросах смотрите Конструкторы запроса и представления (Query and View Designers) и Как: создавать запросы (Visual FoxPro).

Для заполнения элемента управления значениями из запроса

  1. Установите свойство RowSourceType в значение 4 (Query file - Файл запроса).

  2. Установите свойство RowSource, указав имя файла запроса .qpr, включая, по необходимости, путь.

    NoteЗамечание

    Убедитесь, что включили в имя файла расширение .qpr. Однако, если вы не укажите расширения файла, Visual FoxPro подразумевает в этом случае расширение .qpr.

Например, приведенные ниже строки кода устанавливают свойство RowSourceType в значение 4, что указывает, что источником данных является файл .qpr и определяют имя .qpr файла для свойства RowSource:

 CopyCode imageСкопировать код
Form1.lstMyList.RowSourceType = 4
Form1.lstMyList.RowSource = "MyQuery.qpr"

Тип источника - Array (Массив)

Вы можете заполнить элемент управления listbox или combobox элементами или значениями, хранящимися в массиве. Вы можете создать массив в любом месте своего приложения или создать массив в виде свойства формы или набора форм для последующего указания его в свойстве RowSource. Для получения более подробной информации о массивах смотрите Массивы. Для получения более подробной информации о создании свойства-массива смотрите Создание форм.

Для заполнения элемента управления из массива

  1. Установите свойство RowSourceType в значение 5 (Array).

  2. Установите свойство RowSource, указав имя массива.

Например, приведенные ниже строки кода создают массив из 10-ти элементов, сохраняют в массиве значения, устанавливают значение свойства RowSourceType в 5, что указывает, что источником данных является массив, и указывают имя массива в свойстве RowSource:

 CopyCode imageСкопировать код
DIMENSION gaMyArray(10)
FOR gnCount = 1 to 10  
   STORE gnCount TO gaMyArray(gnCount)
NEXT 
Form1.lstMyList.RowSourceType = 5
Form1.lstMyList.RowSource = "gaMyArray"
NoteЗамечание

Установка свойства RowSource оценивается Visual FoxPro по необходимости в вашем приложении и не ограничивается только методом, в котором вы установили RowSource. Вы должны иметь это в виду.

Например, если вы создаете локальный массив в методе, область видимости этого массива относится к методу, то есть он не будет доступен во всех случаях, когда Visual FoxPro требуется оценить установку свойства. Если вы установили свойство RowSource в свойство-массив формы или набора форм, вам нужно ссылаться на свойство относительно элемента управления, но не метода, в котором вы установили свойство. В качестве примера, предположим, что у вас имеется форма со свойством-массивом с именем arrayProp и приведенные ниже строки кода размещены в событии Init формы. Первая строка кода произведет ошибку, тогда как вторая строка не вызовет ошибки:

 CopyCode imageСкопировать код
THIS.lst1.RowSource = "THIS.arrayprop"   
THIS.lst1.RowSource = "THISFORM.arrayprop" 

Тип источника данных - Fields (Поля)

Вы можете заполнить элемент управления listbox или combobox значениями из полей одиночной таблицы. В противовес случаю, когда RowSourceType установлен в 2 (Table alias - Псевдоимя таблицы), установка RowSourceType в 6 (Fields - Поля) дает возможность отображать поля независимо от их реального расположения в таблице.

NoteСовет

Если вы желаете заполнить элемент управления полями из множества таблиц, установите RowSourceType в 3 и укажите а качестве источника для RowSource предложение SQL SELECT.

Для заполнения элемента управления полями из одиночной таблицы

  1. Установите свойство RowSourceType в значение 6 (Fields - Поля).

  2. Установите RowSource указанием поля или разделенным запятыми списка полей.

    Если таблица открыта, вы можете указать RowSource следующим образом:

      CopyCode imageСкопировать код
    Form1.lstMyList.RowSource = field1
    Form1.lstMyList.RowSource = field2, field3, ...

    Если таблица еще не открыта, предварите поле или список полей псевдоименем таблицы и точкой(.), например:

     CopyCode imageСкопировать код
    Form1.lstMyList.RowSource = TableAlias.field1
    Form1.lstMyList.RowSource = TableAlias.field1, field3, field2, ...

Например, приведенные ниже строки кода открывают таблицу, устанавливают RowSourceType в 6, что указывает, что в качестве источника используются поля, и указывают для RowSource поля из таблицы Products в базе данных Northwind, расположенной в каталоге ..\Samples\Northwind:

 CopyCode imageСкопировать код
OPEN DATABASE (HOME(2)+"Northwind\Northwind")
USE Products
Form1.lstMyList.RowSourceType = 6
Form1.lstMyList.RowSource = "productname, productid"

Приведенные ниже строки кода указывают поля из таблицы Customers, которая не открыта:

 CopyCode imageСкопировать код
OPEN DATABASE (HOME(2)+"Northwind\Northwind")
Form1.lstMyList.RowSourceType = 6
Form1.lstMyList.RowSource = "Customers.companyname, customerid"

Тип источника - Files (Файлы)

Вы можете заполнить элемент управления listbox или combobox именами файлов из текущего каталога. Список будет, кроме того, содержать опции, позволяющие вам выбрать разные диски и каталоги, которые будут использоваться для указания файлов, размещенных в них.

Для заполнения элемента управления именами файлов из каталога

  1. Установите свойство RowSourceType в значение 7 (Files - Файлы).

  2. Установите RowSource указанием скелета файла или маски, такими как *.* или *.расширение_имени_файла.

Например, приведенные ниже строки кода установят RowSourceType в 7 и укажут скелет файла для RowSource:

 CopyCode imageСкопировать код
Form1.lstMyList.RowSourceType = 7
Form1.lstMyList.RowSource = "*.*"

Тип источника - структура полей

Вы можете заполнить элемент управления listbox или combobox именами полей в таблице. Отображение списка полей полезна в случае, когда пользователь желает производить поиск значений в конкретном полей или организовать эти поля в таблице.

Для заполнения элемента управления списком полей из таблицы

  1. Установите свойство RowSourceType в значение 8 (Field structure).

  2. Установите RowSource указанием имени или псевдоимени таблицы.

Например, приведенные ниже строки кода RowSourceType в 8 для указания, что заполнения будет использоваться структура полей и укажут имя таблицы для RowSource:

 CopyCode imageСкопировать код
Form1.lstMyList.RowSourceType = 8
Form1.lstMyList.RowSource = "Customers"

Тип источника - Pop-Up

Включено для совместимости назад; установка RowSourceType в 9 (Pop-up) предоставляет возможность заполнить listbox или combobox из определенных ранее pop-up или menu.

Для заполнения элемента управления pop-up menu

  • Установите свойство RowSourceType в значение 9 (Pop-up).

Тип источника - Collection (Коллекция)

Вы можете заполнить элемент управления listbox или combobox членами и значением свойств объектов в коллекции или объектами Collection.

Для заполненния элемента управления членами коллекции

  1. Установите свойство RowSourceType в значение 10 (Collection).

  2. Установите RowSource указанием имени коллекции.

Например, приведенные ниже строки кода создадут коллекцию и две формы, введут формы и три строки в коллекцию, установят RowSourceType в значение 10, для указания, что в качестве типа источника используется объект Collection и укажут имя коллекции и свойства объекта коллекции в свойстве RowSource:

 CopyCode imageСкопировать код
colMyCollection=CREATEOBJECT("Collection")
frm1=CREATEOBJECT("Form")
frm2=CREATEOBJECT("Form")
colMyCollection.Add(frm1)
colMyCollection.Add(frm2)
colMyCollection.Add("Item 1")
colMyCollection.Add("Item 2")
colMyCollection.Add("Item 3")
Form1.lstMyList.RowSourceType = 10
Form1.lstMyList.RowSource = "colMyCollection, Caption, Name"

Различные типы источников

Вы можете заполнить элемент управления listbox или combobox элементами из различных источников.

Для заполнения элемента управления из различных источников

Смотрите также