[vb2008] DataGridView

giovedì 12 marzo 2009 - 12.52

tankian Profilo | Junior Member

Ciao, vi espongo brevemente il mio problema, scusandomi in anticipo per la banalità della domanda!

Ho una form che contiene un TextBox ed un DataGridView che preleva i dati da un DataSource.
Vorrei fare una cosa in teoria molto semplice ma che non riesco a fare!

Praticamente vorrei ottenere l'index di una riga della DGV conoscendo il valore di una delle celle della riga. Questo valore lo ottengo scrivendolo nella TB, owiamente all'evento textchanged.

Qualcuno sa aiutarmi? Grazie in anticipo per eventuali risposte

alexmed Profilo | Guru

Ciao Stefano

Prova a vedere se questo codice in VB ti può servire

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Ciao
alexmed

tankian Profilo | Junior Member

ciao alex, grazie per la risposta.

Il concetto penso sia quello, però non sono riuscito ad utilizzarla nel mio caso specifico.

Ormai ho capito che devo scorrere tutti i valori delle celle finchè non trovo il valore della TB...però non riesco.

ho provato a fare una cosa del genere ( molto abbozzata)

For icol As Integer = 0 To DataGridView1.Columns.Count - 2 For irow As Integer = 0 To DataGridView1.Rows.Count If DataGridView1.Item(icol, irow).Value.ToString = TextBox1.Text Then Dim vrow As String vrow = DataGridView1.Item(icol, irow).RowIndex End If Next Next TextBox2.Text = vrow.ToString

ma ovviamente non va...suggerimenti?

Gianni77 Profilo | Junior Member

Hai fatto un po un pasticcio tra righe e colonne, prova cosi:

For irow As Integer = 0 To DataGridView1.rows.Count - 2 For icol As Integer = 0 To DataGridView1.columns.Count -1 If DataGridView1.Item(icol, irow).Value.ToString = TextBox1.Text Then Dim vrow As integer = DataGridView1.Item(icol, irow).RowIndex End If Next Next TextBox2.Text = vrow.ToString

Anche se alla fine non serve recuperare il rowindex perchè la variabile irow contiene già l'indice giusto, ma te l'ho rimasto come hai fatto tu

tankian Profilo | Junior Member

Ciao Gianni, copiando incollando mi da: "Riferimento a un oggetto non impostato su un'istanza di oggetto."

Gianni77 Profilo | Junior Member

In quale punto?

tankian Profilo | Junior Member

TextBox2.Text = vrow.ToString (la fine)

Gianni77 Profilo | Junior Member

Mi sa che il ciclo non ha trovato corrispondenza tra cio che hai scritto nella textbox da cercare con quello contenuto nella datagridview. Prova:

dim vrow as string="non ho trovato niente" For irow As Integer = 0 To DataGridView1.rows.Count - 2 For icol As Integer = 0 To DataGridView1.columns.Count -1 If DataGridView1.Item(icol, irow).Value.ToString = TextBox1.Text Then vrow = irow.toString End If Next Next TextBox2.Text = vrow

tankian Profilo | Junior Member

adesso funziona! ma ascolta, ti chiedo l'ultima cosa

in questo modo io controllo tutte le righe e tutte le colonne..se invece volessi controllare soltanto le righe e la colonna so già che è column(0)..come dovrei modificarlo?

Gianni77 Profilo | Junior Member

beh.. elimini il ciclo delle colonne e ci metti lo zero (o l'1 ?!?)

dim vrow as string="non ho trovato niente" For irow As Integer = 0 To DataGridView1.rows.Count - 2 If DataGridView1.Item(0, irow).Value.ToString = TextBox1.Text Then vrow = irow.toString End If Next TextBox2.Text = vrow

se è tutto ok non dimenticare di accettare la risposta

tankian Profilo | Junior Member

ok anche questi risolto, però c'è un problema. Quando scrivo il valore dell'ultima riga la TB2 mi restituisce il valore inziale di vrow cioè "non ho trovato nietne". Perchè secondo te?

Gianni77 Profilo | Junior Member

metti -1 anzichè -2 nel ciclo

Gianni77 Profilo | Junior Member

come ha scritto alexmed, devi mettere -2 Se la proprietà AllowUserToAddRows è impostata su True (difatti a true la datagridview aggiunge una riga vuota in più in automatico), se è false la riga in piu non viene aggiunta e quindi devi mettere -1

alexmed Profilo | Guru

Ciao ragazzi
Vedo che siete giunti ad una conclusione.
Volevo solo proporre a Stefano, qualora lo trovasse utile, di aggiungere una ComboBox nel quale aggiungere come item il nome della colonna.
Questo ti consentirebbe di fare la ricerca sulla colonna che selezioni nella combobox
Nel caso avresti una situazione del genere

For iRow As Integer = 0 To Me.DataGridView1.RowCount - 1 ' -2 Se la proprietà AllowUserToAddRows è impostata su True
If Me.DataGridView1.Item(Me.ComboBox1.Text, iRow).Value.ToString.StartsWith(Me.TextBox2.Text) = True Then
MsgBox(Me.DataGridView1.Item(Me.ComboBox1.Text, iRow).RowIndex)
End If
Next

Ciao
E ricordati che se ti siamo stati utili puoi clikkare su accetta altrimenti chiedi pure

Ciao

alexmed

tankian Profilo | Junior Member

prima di tutto grazie a gianni, e grazie owiamente pure ad alex per avermi dato un'idea molto carina

ciao!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5