Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Controllare presenza di una Stringa in DataGridView
Forum - C# / VB.NET - [VB.NET] Controllare presenza di una Stringa in DataGridView

Avatar
bagh3 (Normal User)
Newbie


Messaggi: 11
Iscritto: 10/03/2011

Segnala al moderatore
Postato alle 19:37
Giovedì, 10/03/2011
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:

Codice sorgente - presumibilmente VB.NET

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



Con DataGridView però, l'operazione:

Codice sorgente - presumibilmente VB.NET

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



..restituisce:

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

Ora, so già dell'esistenza della ricerca ricorsiva
(http://www.pierotofy.it/pages/extras/forum/16/1007945-vbne ...
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 :)


Memento
Audere
Semper
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2764
Iscritto: 21/09/2007

Up
1
Down
V
Segnala al moderatore
Postato alle 19:53
Giovedì, 10/03/2011

molto ma moooolto meglio sarebbe spostare questa ricerca così gravosa sul database. una semplice select con where like ti risolverà il problema :)


Ingegnere Informatico
https://ldlagency.it
PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 19:55
Giovedì, 10/03/2011
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
Codice sorgente - presumibilmente Plain Text

  1. 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...

Grazie mille per la risposta, il problema si pone che tale operazione verr - bagh3 - 10/03/11 20:02


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2764
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 21:21
Giovedì, 10/03/2011

soluzione in una riga senza utilizzare database:

Codice sorgente - presumibilmente C# / VB.NET

  1. 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"


Ingegnere Informatico
https://ldlagency.it
PM
Avatar
Baghe (Normal User)
Newbie


Messaggi: 3
Iscritto: 10/03/2011

Up
-1
Down
V
Segnala al moderatore
Postato alle 20:28
Giovedì, 10/03/2011
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 il 10/03/2011 alle 20:48
non c'è il tasto rispondi perchè questa è una DOMANDA, non una DISCUSSIONE. Se vuoi rispondere devi usare Aggiungi commento - HeDo - 10/03/11 21:05


Memento
Audere
Semper
PM