Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ComboBox и Object [D7, WinXP]


Страницы:   1 2

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]взял из БД


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо