Oppure

Loading
10/03/11 18:37
bagh3
Salve a tutti intanto..

Come da titolo mi rivolgo a voi per chiederVi un modo per controllare se in qualche cella di un DataGridView esiste già un dato valore.

Esempio:
Con ListBox utilizzo:

If ListBox1.Items.Contains("Valore da cercare") = True Then
MsgBox("La lista contiene il valore specificato!")
End If


Con DataGridView però, l'operazione:

If ListBox1.Rows.Contains("Valore da cercare") = True Then
MsgBox("La lista contiene il valore specificato!")
End If


..restituisce:

Impossibile convertire il valore di tipo 'String' in 'System.Windows.Forms.DataGridViewRow'.

Ora, so già dell'esistenza della ricerca ricorsiva
(pierotofy.it/pages/extras/forum/16/1007945-vbnet_come_cercare_un_elemento_in_un_datagridview/)
ma il problema è che la mia DataGridView conterrà sulle 10000 righe e ne aggiungerà sulle 1000 al colpo e, come potrete pensare anche voi, effettuare la ricerca ricorsiva per ogni nuovo valore aggiunto diventerebbe --> :om:

Attendo con ansia Vostre risposte :)
aaa
10/03/11 18:53
HeDo

molto ma moooolto meglio sarebbe spostare questa ricerca così gravosa sul database. una semplice select con where like ti risolverà il problema :)
aaa
10/03/11 18:55
walker93
L'errore è dovuto al fatto che usi contains applicato a Rows, ma Rows è una collezione di DataGridViewRow e non di stringhe, di conseguenza restituisce errore


In ogni caso ti suggerisco di usare comunque la ricerca ricorsiva con 1 piccola variazione

o la usi inserendo nel ciclo anche
Application.DoEvents()

per impedire il freeze dell'applicazione
oppure esegui la ricerca in un thread a parte creato appositamente per permettere all'applicazione di proseguire...
io non so suggerirti di meglio...
aaa
10/03/11 19:28
Baghe
Sono sempre Bagh3,
mi sono dovuto riiscrivere perche non visualizzavo il tasto "rispondi".

Comunque grazie a tutti e due per le risposte ma mi interessa sapere di più da HeDo come spostare i dati della tabella in un DB per poi poterci effettuare la ricerca.

Altrimenti un idea m'è venuta, vado a mangiare, poi vi spiego ^^


---------------------------------------------------------------------


Ecco l'idea:

Carico i vecchi dati sia nella DataGrid che in una ListBox.
Controllo se il nuovo dato è presente sulla ListBox con "Contains".
Se non è presente lo inserisco in tutti e due i controllo e procedo col prossimo.

Grazie lo stesso a tutti :k:
Ultima modifica effettuata da Baghe 10/03/11 19:48
aaa
10/03/11 20:21
HeDo

soluzione in una riga senza utilizzare database:


Dim rows = Where DirectCast(item.Cells(0).Value, String) = "1000"



dentro rows ci saranno le righe della grid che hanno il valore della prima cella pari a "1000"
aaa