Selezionare riga di una datagridview

mercoledì 25 agosto 2010 - 16.18

dompa72 Profilo | Senior Member

AIUTO
Ciao a tutti,
ho una datagridview collegata ad un datatable con questi parametri:
Multiselect = true
SelectionMode = FullRowSelect

utilizzo c#2008 con .net3.5

l'utente può selezionare qualsiasi riga anche più di una...nessun problema.
Se l'utente tramite una form di dataentry inserisce/aggiorna un record, dovrei, alla fine dell'attività, selezionare solo la riga inserita/aggiornata (non è necessariamente l'ultima).

ci provo con le varie select sia a livello di cella che di riga ma non riesco a selezionare a selezionare la riga con il colore blu e spostare il triangolino nero di selezione contemporaneamente
se non setto a false il multiselect aggiunge la linea blu al record scelto
dove sbaglio

this.dataGridView1.MultiSelect = false; for (int i = 0; i < this.dataGridView1.Rows.Count; i++ ) { if ((long)this.dataGridView1.Rows[i].Cells["ID"].Value == lng_ID) { this.dataGridView1.Rows[i].Selected = true; this.dataGridView1.Rows[i].Cells["Nome"].Selected = true; } } this.dataGridView1.MultiSelect = true;
grazie


Ho risolto in questo modo:
this.dataGridView1.MultiSelect = false; for (int i = 0; i < this.dataGridView1.Rows.Count; i++) { if ((long)this.dataGridView1.Rows[i].Cells["ID"].Value == lng_ID) { this.dataGridView1.Rows[i].Selected = true; this.dataGridView1.Rows[i].Cells["Nome"].Selected = true; this.dataGridView1.FirstDisplayedCell = this.dataGridView1.Rows[i].Cells["Nome"]; } } this.dataGridView1.MultiSelect = true; for (int i = 0; i < this.dataGridView1.Rows.Count; i++) { if ((long)this.dataGridView1.Rows[i].Cells["ID"].Value == lng_ID) { this.dataGridView1.Rows[i].Selected = true; this.dataGridView1.Rows[i].Cells["Nome"].Selected = true; this.dataGridView1.FirstDisplayedCell = this.dataGridView1.Rows[i].Cells["Nome"]; } }

Però non so spiegarmi perchè devo fare due volte lo stesso ciclo uno per con il multiselect ed uno senza
Qualcuno mi spiega il perchè??? Non penso che sia questo il metodo migliore.
Grazie

Cimperiali Profilo | Newbie

scusa, hai provato così?

this.dataGridView1.MultiSelect = false; for (int i = 0; i < this.dataGridView1.Rows.Count; i++ ) { if ((long)this.dataGridView1.Rows[i].Cells["ID"].Value == lng_ID) { this.dataGridView1.Rows[i].Selected = true; this.dataGridView1.Rows[i].Cells["Nome"].Selected = true; break; } } this.dataGridView1.MultiSelect = true;


Cosa è successo all' Help in Vs 2010?

https://connect.microsoft.com/VisualStudio/feedback/details/558626/visual-studio-2010-offline-help-experience-is-inferior-to-the-visual-studio-2008-offline-help-experience

dompa72 Profilo | Senior Member

>scusa, hai provato così?
>
>
>this.dataGridView1.MultiSelect = false;
>for (int i = 0; i < this.dataGridView1.Rows.Count; i++ )
>{
>if ((long)this.dataGridView1.Rows[i].Cells["ID"].Value == lng_ID)
> {
> this.dataGridView1.Rows[i].Selected = true;
>this.dataGridView1.Rows[i].Cells["Nome"].Selected = true;
>
> break;
> }
>}
>
>this.dataGridView1.MultiSelect = true;
>
>
>
>Cosa è successo all' Help in Vs 2010?
>
>https://connect.microsoft.com/VisualStudio/feedback/details/558626/visual-studio-2010-offline-help-experience-is-inferior-to-the-visual-studio-2008-offline-help-experience
>
ho provato anche così, mi sposta la banda blu ma non il tringolino di colonna.

Cosa mi sfugge qualcosa?

Grazie

Cimperiali Profilo | Newbie

e hai messo anche questa riga prima del break?
this.dataGridView1.FirstDisplayedCell = this.dataGridView1.Rows[i].Cells["Nome"];



Cosa è successo all' Help in Vs 2010?

https://connect.microsoft.com/VisualStudio/feedback/details/558626/visual-studio-2010-offline-help-experience-is-inferior-to-the-visual-studio-2008-offline-help-experience

dompa72 Profilo | Senior Member

>e hai messo anche questa riga prima del break?
>
>this.dataGridView1.FirstDisplayedCell = this.dataGridView1.Rows[i].Cells["Nome"];
>
>
>
>
>Cosa è successo all' Help in Vs 2010?
>
>https://connect.microsoft.com/VisualStudio/feedback/details/558626/visual-studio-2010-offline-help-experience-is-inferior-to-the-visual-studio-2008-offline-help-experience
>
il Break l'ho tolto, ho postato il codice con il quale ho risolto il problema.
notando il comportamento il primo ciclo mi sposta la barra blu, il seccondo ciclo mi sposta il triangolino nero.

naturalmente questa o posso fare se sono pochi record.

Vorrei risolvere in modo pulito e non in questo modo

Grazie

Cimperiali Profilo | Newbie

l'idea mia era: il tuo pprimo ciclo è sufficiente se esci per tempo (quando trrovi a riga da selezionare), perchè continuando a ciclare...sposti il focus e con l'abilitazione al multiselect trovi (correttamente) più di una riga selezionata -e il triangolino indica l'ultima attiva , che dovrebbe essere l'ultima riga della griglia ovvero l'ultima da te impostata nel codice. Se invece esci per tempo, dovresti aver selezionato solo quella...
[size=1]
Bring back Dynamic Help in Vs 2010

https://connect.microsoft.com/VisualStudio/feedback/details/507561/bring-back-the-dynamic-help-in-visual-studio-2010
[/size]

dompa72 Profilo | Senior Member

>l'idea mia era: il tuo pprimo ciclo è sufficiente se esci per
>tempo (quando trrovi a riga da selezionare), perchè continuando
>a ciclare...sposti il focus e con l'abilitazione al multiselect
>trovi (correttamente) più di una riga selezionata -e il triangolino
>indica l'ultima attiva , che dovrebbe essere l'ultima riga della
>griglia ovvero l'ultima da te impostata nel codice. Se invece
>esci per tempo, dovresti aver selezionato solo quella...

anche con il break non sono riuscito ad evitare il secondo ciclo.

per evitare il doppio ciclo ho risolto in questo modo:

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

se faccio un foreach devo fare un altro ciclo.

Questo è un mistero....almeno per me

Grazie comunque della risposta, se avete un'altra idea fammi sapere.

davide86 Profilo | Newbie

possibile soluzione:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5