Retomo este tema porque no sé que estoy haciendo mal.
Cita:
Empezado por ecfisa
Código:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
DataSet->DisableControls();
DataSet->First();
__try {
while (! DataSet->Eof ) {
ComboBox1->AddItem(DataSet->FieldByName("NOMBRE")->AsString,
(TObject*)DataSet->FieldByName("ID")->AsInteger);
DataSet->Next();
}
} __finally {
DataSet->First();
DataSet->EnableControls();
}
}
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
int ix = ComboBox1->ItemIndex;
String NOMBRE = ComboBox1->Items->Strings[ix]; // NOMBRE
String ID = (int)ComboBox1->Items->Objects[ix]; // ID
ShowMessage(NOMBRE+" "+ID); // ej: Mostrar
}
|
Hay dos cosas que no acabo de entender.
1ª. La línea de código
String ID = (int)ComboBox1->Items->Objects[ix], ¿no da error al tratar de meter un int en un string?
2ª. Yo necesito buscar el valor que viene de una tabla para mostrar el ítem correspondiente. Estoy haciendo esto:
Para cargar el ComboBox:
Código:
Query->Close();
Query->SQL->Text = "SELECT Etiqueta, Valor, Literal FROM 'Instalacion.db' WHERE Etiqueta = 'Situacion' ORDER BY Valor";
Query->Open();
for (; !Query->Eof; Query->Next())
Situacion->AddItem(Query->FieldByName("Literal")->AsString, (TObject*)Query->FieldByName("Valor")->AsInteger);
Para "leer" el contenido:
Código:
for (nItem = 0; nItem < Combo->Items->Count; nItem ++)
nPrueba = (int)Combo->Items->Objects[nItem];
pero al correr el programa de da un mensaje
List index out of bounds (1). Interpreto que trata de ir más allá del último índice cargado en el ComboBox, pero lo cierto es que tiene seis elementos y esto pasa con
nItem = 1. ¿Alguna idea?