![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ComboBox и Object [D7, WinXP]
Leonid © (2007-12-07 20:32:00)Вот добавляю в
ComboBox1.Items.AddObject(Str,tobject(Id));соответсвенно строку и ID, потом считываю из БДADODataSet1.FieldByName('Id').AsInteger]номер, но никак не пойму как выбрать из ComboBox1 элемент с этим ID, помогите разобраться?
Леон (2007-12-10 10:44:00) [1]
> Вот добавляю в ComboBox1.Items.AddObject(Str,tobject(Id));
> соответсвенно строку и ID, потом считываю из БД ADODataSet1.
> FieldByName('Id').AsInteger] номер, но никак не пойму как
> выбрать из ComboBox1 элемент с этим ID, помогите разобраться?
>
Я сталкивался с подобной проблемой... может этот путь Вам поможет.
1. использовал класс-обёртку над integer вроде
type
TMyInt = class (TObject)
value: integer;
constructor Create( _value: integer);
end;
тогда заполнение ComboBox:
...AddObject(Str, TMyInt.Create(ID) );
2. поиск _нужной_ строки в ComboBox можно делать перебором в цикле всех строк и выбор той, у которой ID = искомому ID
if (ComboBox.Objects[ComboBox.ItemIndex] as TMyInt).Value=ID then...
{RASkov} (2007-12-07 22:39:00) [2]> [19] Leonid (07.12.07 21:23)
Сумеешь разобраться вот в этом:
DFM:
object Form1: TForm1
Left = 192
Top = 114
Width = 239
Height = 207
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object ComboBox1: TComboBox
Left = 4
Top = 144
Width = 145
Height = 21
ItemHeight = 13
TabOrder = 0
end
object StringGrid1: TStringGrid
Left = 4
Top = 8
Width = 213
Height = 133
ColCount = 3
TabOrder = 1
end
end
PAS:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var N: Integer;
begin
StringGrid1.Cells[1,1]:='Москва';
StringGrid1.Cells[1,2]:='Киев';
StringGrid1.Cells[1,3]:='Вольск';
StringGrid1.Cells[1,4]:='Стамбул';
StringGrid1.Cells[2,1]:='33';
StringGrid1.Cells[2,2]:='112';
StringGrid1.Cells[2,3]:='97512';
StringGrid1.Cells[2,4]:='456';
for N:=1 to 4 do
ComboBox1.Items.AddObject(StringGrid1.Cells[1, N], TObject(StrToInt(StringGrid1.Cells[2, N])));
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
ComboBox1.ItemIndex:=ComboBox1.Items.IndexOfObject(TObject(StrToInt(StringGrid1. Cells[2, ARow])));
end;
end.
Или опять не то? Только не говори, что у тебя БД, а здесь обычный стринггрид....
Leonid (2007-12-07 21:23:00) [3]Блин ну я на PHP программист, за Delphi лет 5-ть не садился уже, мне сложно все тонкости вспомнить =(((
Leonid (2007-12-07 21:22:00) [4]Я делаю
ADODataSet1.CommandText := 'SELECT ID FROM table';
ADODataSet1.Open;
ID := ADODataSet1.FieldByName('ID').AsInteger);
У меня есть уже заполенный ComboBox, его я заполял так ComboBox4.Items.AddObject(Str,tobject(Id));
Например:
Москва
Питер
Лондон
Допустим у меня ID Мосвы в базе 33, в ComboBox4 ItemIndex Москвы 0, мне нужно что бы я по полученному ID из базы смог встать в ComboBox4 на правильную позицию.
Правильный_Вася (2007-12-07 21:19:00) [5]у какого селекта?
тебе нужно найти в списке то, что взято из базы
или найти в базе то, что выбрано в списке?
{RASkov} (2007-12-07 21:17:00) [6]> [15] Leonid (07.12.07 21:13)
По крайней мере вот это
ComboBox2.Items.IndexOfObject(TObject(ADODataSet1.FieldByName('ID').AsInte ger))
хоть синтаксически верно написано.... а что же у тебя там не получается....
Ты либо подробнее рассказывай, либо подкрепляй вопросы проблемным кодом....
Leonid (2007-12-07 21:13:00) [7]Да эту ошибка
Блин я и так пробовал
ComboBox2.Items.IndexOfObject(TObject(ADODataSet1.FieldByName('ID').AsInteger)) Все равно не тот ID что у селекта
{RASkov} (2007-12-07 21:13:00) [8]> [9, 10, 13] Leonid (07.12.07 21:02)
> все равно ошибку выдает (
А ошибку выдает List Index of Bounds, так?
Leonid (2007-12-07 21:12:00) [9]Шикарно ComboBox.SelectedIndex - это выбранный в данный момент ID и что мне это дает??? Ничего!
Правильный_Вася (2007-12-07 21:08:00) [10]
> все равно ошибку выдает (
а справку почитать по используемым свойствам - никак?
{RASkov} (2007-12-07 21:06:00) [11]> [9, 10] Leonid (07.12.07 21:02)
Сам-то понял, что наворотил???
Твоя строка выглядит так
Что-то:=ADODataSet1.FieldByName('I D').AsInteger;
Leonid (2007-12-07 21:03:00) [12]Вот так
ComboBox2.Items.IndexOfObject(ComboBox2.Items.Objects[ADODataSet1.FieldByName('I D').AsInteger]);
Leonid (2007-12-07 21:02:00) [13]Блин
ComboBox2.Items.IndexOfObject(ComboBox2.Items.Objects[ADODataSet1.FieldByName('& #200;Ä_ÎÒÄÅË').AsInteger]);
все равно ошибку выдает (
Leonid (2007-12-07 21:00:00) [14]А окей, спасибо!
Anatoly Podgoretsky (2007-12-07 20:59:00) [15]> Leonid (07.12.2007 20:57:04) [4]
Сделай приведение Ид до TObject
Правильный_Вася (2007-12-07 20:58:00) [16]+ ComboBox.SelectedIndex
{RASkov} (2007-12-07 20:58:00) [17]> [4] Leonid (07.12.07 20:53)
Ну наверное как-то так:
ComboBox1.ItemIndex:=ComboBox2.Items.IndexOfObject(TObject(ADODataSet1.FieldByNa me('Id').AsInteger));
Leonid (2007-12-07 20:57:00) [18]А можно пример
ComboBox1.IndexOfObject(ADODataSet1.FieldByName('Id').AsInteger]) ? Так?
Anatoly Podgoretsky (2007-12-07 20:56:00) [19]> Leonid (07.12.2007 20:53:02) [2]
Тогда IndexOfObject
Leonid (2007-12-07 20:53:00) [20]Нужно получить ItemIndex в котором
храниться ADODataSet1.FieldByName('Id').AsInteger]
У меня есть список стран и городов из базы я выбираю город и хочу чтобы второй ComboBox встал на пункт с ID страны который яADODataSet1.FieldByName('Id').AsInteger]взял из БД