![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос простой, аж смешно по DBComboBox
Rule © (2004-12-10 16:08:00)значит надо такой комбобокс чтобы содержимое его небыло привязнао к источнику БД, а список заполнялся из источника из определенного поля ...
DBComboBox и DBLookupComboBox это немного другое, в первом случае, содержимое, это из источника, а список выпадающий, статические значения а во втором случае и первое и второе из бд берется ....
конечно есть обходные пути, типа при открытии датасета и при его изменении заливались значения ...
но мож есть другие варианты ?
Submarine (2004-12-14 08:02:00) [1]Ну и соответственно вначале обьявить
type
TIDD = class
Iobject: integer;
end;
Submarine (2004-12-14 08:01:00) [2]Ну самый простой способ и наиболее рациональный, когда нужно воспользоваться записями помещеными в Combobox, а именно брать не имена а коды этих обьектов (например таблица в нем 2 поля Id, Name), и мы хотим видеть в Combobox Name, а подставлять id, используйте обьекты:
fmdtmdl.help.sql.Add('Select *');
fmdtmdl.help.sql.Add('From CATALOGCONTENT');
irec:=0;
with fmDTMDL.help do
begin
open;
while not EOF do
begin
Combobox1.items.add(FieldByName('name').AsString);
idd:=tidd.create;
idd.Iobject := FieldByName('ID').value;
ComboBox1.Items.Objects[IRec] := idd;
irec:=irec+1;
next;
end;
end;
А использовать запись, вернее ее код
i1:=Tidd(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).Iobject
ЮЮ (2004-12-14 05:16:00) [3]> значения а во втором случае и первое и второе из бд берется
Cм. Vemer © (10.12.04 18:50) [7]
Выпадающий список - обязательно, а DataSource и DataField могут ьыть незаполнены, в этом случае получаешь именно то, что тебе надо
Rule (2004-12-11 12:08:00) [4]Соловьев © (10.12.04 19:01) [8]
так мне как раз наоборот надо тоесть содержимое не должно быть привязано к бд, тоесть оно мне надо только для анализа, в принципе решение предложено
Vemer © (10.12.04 18:50) [7]
2 Dell3r © (11.12.04 10:32) [9]
а как же случаи изменения добавления, и редактирования .... не предусмотрено и вот вторая часть как раз не надо чтобы в таблице позиционровалось на записи, просто не нада ...
2 DSKalugin © (10.12.04 18:40) [6]
ну это извините прямо в лоб, спасибо конечно за совет, но в принципе до этого так и делал ... хотелось бы более эффективные способы найти ...
Dell3r (2004-12-11 10:32:00) [5]Form.OnCreate
with Table2 do
begin
Close;
IndexName:='';
Open;
while not EOF do
begin
ComboBox1.Items.Add(FieldByName('NameOld').AsString);
// в комбобокс добавляются все записи из колонки NameOld.
Next;
end;
First;
end;
ComboBox1.OnChange
//для отображения в Гриде записи с номером выбранным в Комбобоксе
with ComboBox1 do begin
if ItemIndex <> -1 then
if not Table2.Locate('NameOld', Items[ItemIndex], []) then
ShowMessage(Items[ItemIndex -1] + 'Последняя запись'); end;
Соловьев (2004-12-10 19:01:00) [6]DBComboBox ... это немного другое, в первом случае, содержимое, это из источника, а список выпадающий, статические значения
Нутак и заполни их программно
Vemer (2004-12-10 18:50:00) [7]В похожих случаях использую DBLookupComboBoxс незаполненным DataSource и ручками пихаю его .KeyValueкуда надо. Работает на ура.
DSKalugin (2004-12-10 18:40:00) [8]
Procedure Field2ComboBox(var fld:TFIBStringField; cbm:TComboBox);
var bkm:TBookmark; // (c)DSKalugin
begin
cbm.Clear;
bkm:=fld.DataSet.GetBookmark;
fld.DataSet.DisableControls;
fld.DataSet.First;
try
while not fld.DataSet.EOF do begin
cbm.Items.Add(fld.AsString);
fld.DataSet.Next;
end;
cbm.ItemIndex:=0;
fld.DataSet.GotoBookmark(bkm);
finally
fld.DataSet.EnableControls;
fld.DataSet.FreeBookmark(bkm);
end;
end;
Вызывать так
Field2ComboBox(fmDM.tbSellListSELLER_NAME, cbSellist);
Leksiy (2004-12-10 16:55:00) [9]ересь сжечь ... тебе же ответили по человечески заполняй его програмно из одно таблицы что тебя не устраивает ? нормально скажи
Rule (2004-12-10 16:43:00) [10]отвечаю всем сразу так как у все ответ одинаковый :)))
и его я написал в воросе
конечно есть обходные пути, типа при открытии датасета и при его изменении заливались значения ...
но если других предложений нет, то проще будет свой комбобокс написать, наследник от TComboBox
:)))
ну в принципе я так и думал
Соловьев (2004-12-10 16:35:00) [11]DBComboBox ... это немного другое, в первом случае, содержимое, это из источника, а список выпадающий, статические значения
Нутак и заполни их программно
Dmitriy O. (2004-12-10 16:35:00) [12]Tcombobox.item.add()
Johnmen (2004-12-10 16:30:00) [13]TComboBox
:)