Я расположил на форме два компонента Listbox, и с помощью следующего кода заполнил один из них данными из таблицы:
tableName.Refresh; {в вашем случае это может и не понадобится} tableName.First; {Убедимся, что мы смотрим первую запись} while not tableName.Eof do {проходим в цикле таблицу} begin listbox1.items.add(tableName.FieldByName('USRID').AsString); {добавляем элемент в listbox1} tableName.Next; {переходим к следующей записи} end; |
ниже я привел процедуру из моего рабочего кода, в котором я использую эту технологию. Я передаю ей в качестве параметров имя таблицы и имена компонентов listbox1 и listbox2. Я пользуюсь этой процедурой, поскольку у меня есть несколько таблиц с полями одинакового типа:
procedure TTemplateFrm.buildList(tableName: TTable; SelBox, AvailBox: TListBox); begin {в этой процедуре мы собираемся добавить данные в listbox'ы} {получаем любые новые данные} tableName.Refresh; {Убедимся, что мы смотрим первую запись} tableName.First; {Теперь очищаем ListBox'ы} SelBox.Clear; AvailBox.Clear; {Теперь добавляем элементы} while not tableName.EOF do begin AvailBox.Items.Add(tableName.fieldByName('USRID').AsString + ' ' + tableName.fieldByName('DESCRIPTION').AsString); tableName.Next; end; end; |
Как перемещать данные между этими двумя списками? Если вы хотите использовать технологию "drag and drop" (перетащи и брось), то в обработчике mousedown вашей исходной таблицы воспользуйтесь процедурой begindrag:
if Button = mbLeft then Tlistbox(sender).BeginDrag(false); |
Затем, в вашем другом ListBox, для "опознания" и получения данных создайте следующий обработчик DragOver:
if Source = ListBox1 then Accept := true else Accept := false; |
Не используйте "Accept := (Source is TListbox)", как это показано в большинстве примеров. У вас имеется два компонента ListBox, следовательно, вам нужно сослаться на имя объекта, а не на его тип, а иначе программа просто не поймет кто есть кто.
Затем в обработчике dragDrop поместите следующий код, добавляющий данные в ListBox2 и удаляющий их из ListBox1.
Listbox2.Items.Add(Listbox1.Items[Listbox1.ItemIndex]); Listbox1.Items.Delete(Listbox1.ItemIndex); |
И, наконец, добавьте кнопку "Сохранить", если вы хотите сохранить содержимое ListBox2 в базе данных.
Я надеюсь, что это именно то, что вы искали, и что это окажется вам полезным. Если вы хотите также перемещать данные из ListBox2 в ListBox1, вам необходимо будет создать тот же код, но реверсировать его для получения в коде правильных ссылок на компоненты ListBox. [001507]