Domanda

Sto usando Delphi 6 e desidero una casella di riepilogo associata al database con la selezione multipla. Ho trovato tre tipi di caselle di riepilogo: TListBox , TDBListBox e TDBLookupListBox .

Per quanto posso capire, TListbox non è vincolato al database. TDBListBox e TDBLookupListBox non possono essere multi-selezionati.

Esiste un modo per associare una casella di riepilogo a selezione multipla al database?

È stato utile?

Soluzione

Il problema con i componenti di database è che si basano su un'origine dati e un'origine dati ha un solo cursore. Questo è probabilmente il motivo.

A proposito, devi cambiare i dati? Altrimenti potresti riempire una normale casella di riepilogo da un set di dati. Oppure utilizza una casella di riepilogo di dati invisibili e copia il contenuto in una normale casella di riepilogo.

Altri suggerimenti

Non per quanto ne so.
Lo standard è che offri all'elenco un insieme di valori in cui 1 rappresenta il record corrente.
A meno che tu non abbia un campo multivalore (contro le migliori pratiche), non riesco a vedere come potresti selezionare più ...

O quello che potresti desiderare è in realtà una tabella secondaria?

DevExpress TcxDBListBox supporta la selezione multipla. Uso la loro casella di controllo a discesa multi-selezione associata a un database, è dolce.

I componenti hanno metodi che puoi implementare per convertire in e dal tuo elenco; EditValueToStates e StatesToEditValue. Mentre i dati che conservo non sono normalizzati (memorizzo un elenco delimitato da punti e virgola di numeri di versione), ho creato un indice di ricerca di testo completo sul campo, con un punto e virgola come delimitatore e ora posso ancora eseguire ricerche ottimizzate su quel campo.

È possibile creare il proprio componente listbox personalizzato che discende da TCustomListBox e aggiungere una proprietà Origine dati per l'elenco e un'altra proprietà come TStrings da utilizzare come contenitore per contenere i valori selezionati. È quindi possibile pubblicare le modifiche al database utilizzando un clic sul pulsante.

Se giocherelli con alcune delle opzioni di un TDBGrid e restringi le colonne visualizzate, puoi creare qualcosa che assomigli molto a una casella di riepilogo. Prova a impostare la proprietà Options su [dgTitles, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgCancelOnExit, dgMultiSelect] e lavora da lì.

In un TDbLookupListBox hai la possibilità di associare due cose diverse ai dati; in primo luogo è possibile associare l'elenco a un set di dati (ListSource / ListField / KeyField), in secondo luogo è possibile associare l'elemento selezionato a un campo in un altro set di dati (DataSource, DataField). Non c'è nulla di concettualmente sbagliato nel voler associare l'elenco di elementi a un set di dati e quindi gestire manualmente più selezioni, tuttavia non penso che sia possibile con l'implementazione corrente senza sottoclassare e abilitare gli stili di controllo richiesti.

In base al tuo commento a François, userei un normale TListbox e scrivo il codice per inserire tutti i valori distinti nell'elenco, quindi gestirai tu stesso i valori di selezione multipla. La soluzione di Jeremy funziona anche e la DevExpress Express Quantum Grid ha un bel sistema di filtri che potrebbe anche salvarti qualche altra programmazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top