Riga Datagrid [vbnet 2002]

giovedì 15 febbraio 2007 - 16.04

device78 Profilo | Junior Member

Salve,
ho una semplice datagrid collegato ad un database.
Vorrei selezionare una riga specifica. come faccio?
Se scrivo :

DataGrid1.CurrentRowIndex = 10
DataGrid1.Select(10)

va tutto bene ma se l'indice che scelgo (diciamo 100) questa viene selezionata ma la griglia non viene posizionata con lo scroll sul quella riga.

In altre parole se uso un indice di una una riga che è visibile subito nella griglia (cioè non sta sotto e non devo usare lo scroll ) funziona altrimenti viene sempre selzionata ma la griglia non viene posizionata in quella posizione.

spero di essere stato chiaro

grazie

Giscotech Profilo | Junior Member

usando questo metodo , riesci a vedere la riga 100 o no?
In base a che cosa ti devi spostare sulla riga.
Devi fare una ricerca,devi inserire il numero della riga e ti ci devi posizionare sopra o cosa?

Giuseppe Scordo
Giscotech Informatics

device78 Profilo | Junior Member

immaginavo di non essere stato chiaro.

la riga 100 c'è e viene selezionata in questo però vorrei che anche la griglia si posizioni su quella riga.Vorrei diciamo che si facesse uno scroll fino a che no sia visibile quella riga.

spero di essere stato chiaro

grazie comunque

igor Profilo | Junior Member

ma usi il dataGrid o il datagridview?
Se usi il DataGridView imposta questa proprieta: FirstDisplayedScrollingRowIndex
Se invece usi il vecchio DataGrid prova questo:

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

buon lavoro igor

Giscotech Profilo | Junior Member

Se devi posizionarti sulla riga in base alla ricerca di un valore di una colonna puoi fare così:

in base al valore esegui una ricercaa di esso all'interno della tabella che rappresenta la fonte di dati del datagrid.
Incrementi una variabile integer in modo da conoscere le posizioni che ci sono tra il primo record e quello che cerchi.
Poi usi questo valore per spostarti, con la proprietà CurrentRowIndex, alla cella desiderata.

datagrid.CurrentRowIndex = i - 1

ho messo il - 1 perchè nel mio caso con datagrid.CurrentRowIndex = i si posizinava sempre avanti di 1 riga!

Giuseppe Scordo
Giscotech Informatics

device78 Profilo | Junior Member

allora adesso ti spiego precisamente il pb che ancora non risolvo.
allora ho una datagrid di un che popolo con un oledataadpter collegato ad un dataset "Mezzi".

ogni 20 secondi devo fare un "refresh" per vedere se da un altro form sono stati fatte delle modifiche alla tabella collegata al datagrid.

allora uso un timer e l'idea e ricaricare il dataset ma se l'utente ha selezionato una riga precisa prima del refresh vorrei che dopo il refresh il datagrid si riposizioni nella riga selezionata in precedenza.


pos = DataGrid1.CurrentRowIndex

DataSet11.Mezzi.Clear()
OleDbDataAdapter1.Fill(DataSet11.Mezzi)
DataGrid1.Select(pos)
DataGrid1.CurrentRowIndex = pos




con questo codice si fa il refresh la riga viene selzionata ma la griglia riparte dalla posizione in testa e non va dove c'è la riga selezionata.

Giscotech Profilo | Junior Member

metti in una colonna (anche nascosta) del datagrid il codice univoco(ID).
Nel momendo in cui parte l'evento del timer conserva il suo valore.
Dopo il refresh ricerchi il codice nella tabella con una var integer che fa da contatore (i=i+1) quando trovi in valore ch ti interessa hai anche il numero di posizioni che vanno dalla prima riga a quella che ti interessa.
Usa questo valore per spostarti di n posizioni rispetto alla riga 1.
Dovrebbe funzionare...a me funziona.

Dim myCMD As OleDbCommand = New OleDbCommand("SELECT * FROM Articoli", OleDbConnection1)
Dim catText, catStr, CatID, check As String
OleDbConnection1.Open()

Dim myReader2 As OleDbDataReader = myCMD.ExecuteReader()
check = "FALSE"

'id1 valore riga prima del refresh

Do While myReader2.Read()
ID2 = myReader2.Item(1)
i = i + 1
If ID1 = ID2 Then
Exit Do
End If
Loop
myReader2.Close()
OleDbConnection1.Close()
DataGrid2.CurrentRowIndex = i - 1

fammi sapere.

Giuseppe Scordo
Giscotech Informatics

device78 Profilo | Junior Member

allora ho approfittato del tuo codice ed è ho provato cosi

'pos indica la posizione che voglio selezionare

For i = 1 To pos
DataGrid1.CurrentRowIndex = i
DataGrid1.UnSelect(i - 1)
DataGrid1.Select(i)
Next

e funziona.ma perché se faccio un loop funge e se invece gli dico direttamente quale è la posizione che voglio selezionare no va? ( DataGrid1.CurrentRowIndex = pos ; DataGrid1.Select(Pos))
ho visto che però ci mette del tempo (ho datagrid con 10000 righe) allora ho fatto una modifica che mi funziona.Sinceramente no so perchè ma cosi va:

If pos > 10 Then
For i = pos - 5 To pos
DataGrid1.CurrentRowIndex = i
DataGrid1.UnSelect(i - 1)
DataGrid1.Select(i)
Next
Else
For i = 1 To pos
DataGrid1.CurrentRowIndex = i
DataGrid1.UnSelect(i - 1)
DataGrid1.Select(i)
Next
End If

se pos è piccolo (<10) faccio un loop do 0 a pos altrimenti considero 5 indici prima
come se si ci dolesse essere un mini-loop per rendere definitive le modifiche.
Sicuramente sbaglio io qualcosa ma cosi funge e mi basta

grazie dell'aiuto

Giscotech Profilo | Junior Member

Analizzerò il codice che mi hai postato con + calma e ti faccio sapere domani.
Cmq se il post di prima va bene accetta la risposta.
Ciao
Giuseppe Scordo
Giscotech Informatics

igor Profilo | Junior Member

device78,
guarda il mio post precedente.... come detto devi fare l'Unselect della vecchia riga prima di poter fare il select
di quella nuova... come hai fatto tu nel loop... però non credo che sia necessario il loop...

Dopo aver caricato il grid presumo che la riga selezionata sia la prima (index 0) quindi
dg.unselect(0)
dg.select(100)
dg.currentrowindex(100)

igor

device78 Profilo | Junior Member

allora ho seguito il tuo consiglio, ma al ricarico non viene selezionata la riga 0 cosi l'ho fatto io.

DataGrid1.CurrentRowIndex = 0
DataGrid1.Select(0)
DataGrid1.UnSelect(0)

DataGrid1.CurrentRowIndex = pos
DataGrid1.Select(pos)



ok almeno adesso capisco il perchè e funziona bene.
grazie
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5