Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Catturare valori riga da un datagrid
lunedì 24 luglio 2006 - 12.31
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
sasamen
Profilo
| Newbie
5
messaggi | Data Invio:
lun 24 lug 2006 - 12:31
salve,
premetto che sono un javista costretto a lavorare con vb.net, quindi con tutti i limiti che ne derivano.
ho già visto che è possibile estrarre da un datagrid un currentrowindex
quindi, chiamandosi il mio datagrid Emps, per estrarre il valore del campo sID dalla tabella "Dipendenti" nel dataset ds bindato, faccio
ds.Tables("Dipendenti").Rows(Emps.CurrentRowIndex).Item("sID")
fin qui, tutto ok...
ma, se l'utente mi cambia l'ordinamento su colonna?
se, ad esempio, la tabella Dipendenti contiene i campi sID, sNome ed sCognome e l'utente ordina i dati in base a sCcognome, la logica salta.
cosa dovrei fare? disabilitare la possibilità di cambiare l'ordinamento, mi sembra la soluzione più "economica", ma anche la più "sporca".
grazie
Dampyr
Profilo
| Junior Member
169
messaggi | Data Invio:
lun 24 lug 2006 - 14:04
Mi viene in mente solo un'idea, una volta selezionata la riga del datagrid, ti devi ricavare i valori dei campi chiave per quella tabella e poi fare una ricerca all'interno del dataset, per ritrovare la riga selezionata.
... cerca di essere il giocatore di scacchi, non il pezzo sulla scacchiera...
sasamen
Profilo
| Newbie
5
messaggi | Data Invio:
lun 24 lug 2006 - 14:35
innanzitutto... grazie,
dalle mie ricerche risulta che l'oggetto (o "controllo") datagrid sia una delle cose peggio riuscite in casa m$
, a giudicare dalla confusione che regna sovrana in merito all'argomento...
il punto è che la proprietà CurrentRowIndex ritorna un numero sequenziale (base 0) che è in sostanza il numero della riga selezionata, senza nessun legame con l'oggetto Riga, quindi col record contenuto.
la questione è appunto, come giustamente osservi, come fare per ricavare proprio i campi chiave di cui parli?
questa che segue è la parte di codice che definisce il dataset e popola il datagrid:
Dim ds As New DataSet
Dim daMaster As New OleDbDataAdapter("SELECT sID, sNome, sCognome FROM EMPS")
daMaster.Fill(ds, "Dipendenti")
empsGrid.DataSource = ds
empsGrid.DataMember = "Dipendenti"
se adesso voglio il valore del campo sID correntemente selezionato uso
sID = ds.Tables("Dipendenti").Rows(empGrid.CurrentRowIndex).Item("sID")
fin qui, tutto bene, ma se cambio l'ordinamento, il valore di sID non corrisponde + a quanto effettivamente selezionato
>Mi viene in mente solo un'idea, una volta selezionata la riga
>del datagrid, ti devi ricavare i valori dei campi chiave per
>quella tabella e poi fare una ricerca all'interno del dataset,
>per ritrovare la riga selezionata.
sasamen
Profilo
| Newbie
5
messaggi | Data Invio:
mar 25 lug 2006 - 17:17
ok, mi rispondo da solo....
la soluzione -semplice e perversa al tempo stesso- è la seguente:
Dim ds As New DataSet
Dim daMaster As New OleDbDataAdapter("SELECT sID, sNome, sCognome FROM EMPS")
daMaster.Fill(ds, "Dipendenti")
empsGrid.DataSource = ds
empsGrid.DataMember = "Dipendenti"
fatto ciò devo creare una nuova istanza dell'oggetto DataGrid da mettere nell'evento che voglio
Dim dg as DataGrid ' creo un nuovo datagrid
dg = empsGrid ' lo pongo uguale al datagrid corrente (ordinato o meno)
sID = dg(dg.CurrentCell.Rownumber, 1).ToString ' ricavo il valore del campo sID (nella colonna 1)
andreapavia
Profilo
| Senior Member
203
messaggi | Data Invio:
mer 26 lug 2006 - 09:10
Puoi recuperare la riga del datasuorce del tuo datagrid in questo modo
Private Sub TuoDataGrid_MouseUp(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles TuoDataGrid.MouseUp
Dim tastoMouse As String
tastoMouse = e.Button.ToString
Dim pt = New Point(e.X, e.Y)
Dim hit As DataGrid.HitTestInfo = TuoDataGrid.HitTest(pt)
Dim ds As New DataSet
ds = dsDelTuoDatagrid.Clone
***** QUI METTI LA RIGA SELEZIONA IN NUOVO DATASET CHE E' IL CLONE DEL DATASET
***** ASSOCIATO AL TUO DATAGRID: IO USO IL COMANDO TABLE PERCHE' FACCIO RIFERMINTO ***** AL DATAVIEW (se associ il dataset dovrai mettere tables(0))
***** ATTENZIONE A COME SCRIVI table o tables perchè il mio visuol studio qui da lo
***** riempimento automatico del codice
ds.Tables(0).ImportRow(TuoDataGrid.DataSource.table.rows(hit.Row))
***** QUI LO ASSOCI AD UN DATAGRID DI PROVA PER VEDERE SE FUNZIONA
DataGrid1.DataSource = ds.Tables(0)
***** QUI DISTINGUI COSA FARE A SECONDA DEL TASTO DEL MUOSE
If hit.Row > -1 And tastoMouse = "Left" Then
else
end if
ds.dispose
end sub
FUNZIONA SULL'EVENTO MOUSEDOWN E MOUSEUP (non sull'evento click o doppio click)
PS
concordo con te... l'oggetto datagrid è qualcosa di devastante, le cose piu' scontate non le ha....
Torna su
Stanze Forum
Elenco Threads
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 !