PDA

Visualizza la versione completa : [Delphi] Modifica Index di una ListBox


VaLvOnAuTa
22-09-2004, 11:05
Sto sviluppando un software in delphi che raccoglie dei dati da un database mysql e inserisce in una listbox uno dei valori resituiti dalla query.
In pratica prendo dalla tabella "aziende" i valori associati ad ogni azienda e poi ne metto il nome in una ListBox. Quando poi seleziono una riga della ListBox di cui sopra tutti i valori associati all'azienda selezionata vengono visualizzati in degli EditBox. Al momento effettuo la query per la visualizzazione dei dettagli prendendo il nome dell'azienda così come compare nella lista. Però mi chiedevo se era possibile assegnare ad ogni riga, a parte il testo che è il nome dell'azienda, un index che non sia quello progressivo della tabella ma quello autoincrement preso dal database.
E' un'utopia? Ho cercato sulla guida e su internet.
Una cosa che sembra fare al caso mio è ListBox.Items.Insert(index,stringa) ma non ho capito come si usa. :zizi:

alka
22-09-2004, 11:16
Puoi usare il metodo AddObject di ListBox.Items: tale metodo consente di aggiungere una stringa associando un oggetto ad essa, in modo simile ad un dizionario.

Ovviamente, nel nostro caso, lavorando in Win32 e avendo a che fare con un numero intero, non disponiamo di un oggetto ma di un tipo primitivo Integer, quindi occorre fare un cast del valore dell'ID per poterlo inserire nella ListBox.

Un esempio (non verificato)


ListBox.Items.AddObject(CompanyName, TObject(ID));

dove CompanyName e ID sono inizializzati al nome della società e all'ID univoco corrispondente, prelevati dal database.

P.S.: parere personale, non capisco questa smania di usare la ListBox quando esistono tanti Data Control che contengono, al loro interno, tutto ciò che stai sviluppando tu in questo momento, ma collaudati da quasi 10 anni di esperienza di Borland. :confused:

VaLvOnAuTa
22-09-2004, 11:19
Hai ragione. Ma usare una DBGrid mi pare un pò "grossolano", comodo ma grossolano.
Con la DBListBox potrei far visualizzare il contenuto del DB direttamente associandogli un DataSource però con i DataControls non ho molta familiarità.

VaLvOnAuTa
22-09-2004, 11:46
Ok.. prendendo in considerazione l'idea dei DataControls e volendo visualizzare i dati in una DBListBox ho fatto così:
- ho creato una tabella associata a quella da cui prendere i dati (TAziende)
- ho creato un datasource associato a quella tabella (DSAziende)
- ho creato una query associato al datasource (QAziende)
- ho creato la DBListBox (LBAziende) associato alla query settando come DataField il campo "nome".

Cosa c'è di sbagliato in queste operazioni? :dhò:

VaLvOnAuTa
22-09-2004, 13:31
:dhò:

alka
22-09-2004, 13:31
Originariamente inviato da VaLvOnAuTa
Cosa c'è di sbagliato in queste operazioni? :dhò:
Leggi la risposta che ho dato al tuo quesito precedente: il controllo DBListBox modifica i dati di un campo di una tabella, *NON* visualizza tutti i record della tabella; per fare questo, devi usare un controllo DBGrid, che puoi personalizzare nell'aspetto fino a farlo assomigliare ad una comune ListBox.

Ciao! :ciauz:

Loading