Come ottenere l'elemento selezionato corretto in DataGrid?

giovedì 27 ottobre 2005 - 12.49

ysdemarc Profilo | Expert

La questione è questa..

io ho il mio bel DataGrid popolato con un DataTable.

ora se faccio :

int row = MioDataGrid.CurrentCell.RowNumber;
DataTable dt = (DataTable)MioDataGrid.DataSource;
DataRow dr = dt.Rows[row]

ottengo la mia bella riga che è stata selezionata.

Se però malauguratamente l'utente decide di cliccare sulle intestazioni di colanna del DataGrid e quindi sortare a video ii dati visionati con il codice sopra non riesco ad avere la riga realmente selezionata.

Mi spiego meglio se io ho una colonna e due righe che sono valorizzate con A e B

se l'utente seleziona la prima riga ottengo A però se decide di sortare in modo decrescente e seleziona le sua prima riga, cioè B, io ottengo sempre A.

Come si fa a leggere la riga giusta?

andreapavia Profilo | Senior Member

con cosa selezioni la riga,, col mouse????

sembrera' una cazzata ma se la selezioni col mouse (e basta) posso dirti come si fa....

Private Sub tuodatagrid_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles tuodatagrid.MouseDown

Dim pt = New Point(e.X, e.Y)
Dim hti As DataGrid.HitTestInfo = tuodatagrid.HitTest(pt)


If hti.Type = DataGrid.HitTestType.Cell Then


RigaCella = hti.Row
ColonnaCella = hti.Column



da qui in poi hai le informazioni che ti servono,,, becchi il cio' che è visulaizzato nella e cella e vai a lavorare sul record del datasource del datagrid


End If
End Sub

fammi sapere


se la selezione navigando coi tasti non ne ho la piu' pallida idea perchè non l'ho mai fatto




ysdemarc Profilo | Expert

Ciao Andrea

ti ringrazio però non credo che in questo modo risolava il problema.
Alla fine col tuo metodo ottengo il numero di colonna e della riga selezionata.
E questo già riesco ad ottenerlo. Quello che voglio avere è il DataRow relativo alla riga del DataGrid e non del DataTable ad esso associato.

Vincenzo
Programmatore sbilenco :-D

ysdemarc Profilo | Expert

Ciao Coach,

ma è quello che già faccio (vedi il primo post)

Il problema è che così facendo ho questo problema

io presento all'utente i dati ordinati per una certa colonna: ad esempio
A
B
C
...
Z

ora se l'utente seleziona la riga 2 io leggo perfettamente dal DataRow che è stato selezionato B

però se l'utente invece ordina le colonne in alktro modo tipo:
Z
V
U
...
A

la riga numero 1 diventa quella che contiene Z
ma ecco qui l'inchippo
se lui seleziona zeta e io vado a leggere il DataRow della prima riga non leggo Z bensì A poiche nel DataTable la prima riga rimane A.

ora leggendo il DataTable dal DataRow non lo trovo nemmeno ordinato come ha smanettato l'utente poichè me lo restituisce come io glielo ho passato.

Quindi come posso fare?

L'unica che per ora mi viene in mente è capire su quale colonna ha cliccato e in che modo ha ordinato e sortare un DataTable clone da utilizzare con l'indice della riga.. ma la cosa forse è troppo macchinosa... ci sarà pur un modo..

spero di essermi espresso un pò più chiaramente.

grazie tante.

ciao

Vincenzo
Programmatore sbilenco :-D

ysdemarc Profilo | Expert

Perfetto.. a me interessava ottenere il DataRow..

Grazie tante!

ciao!

Vincenzo
Programmatore sbilenco :-D
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