DataGridView gestisce l’evento di riordino della colonna

Ho impostato per il mio object DataGridView

AllowUserToOrderColumns = true; 

Come posso rilevare il riordino delle colonne?

L’evento “Usa ColumnDisplayIndexChanged” sembra quello giusto. Ha funzionato per me. (Vorrei aggiungere un commento che ho avuto il rappresentante per questo.)

Un gestore di eventi per quell’evento conterrà e.Column che riflette il nuovo valore per quella colonna. La proprietà che stai cercando è DisplayIndex. Si noti che l’evento verrà generato per ogni colonna in cui è stato modificato DisplayIndex.

In vb.net:

 Private Sub data_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles data.ColumnDisplayIndexChanged Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name) End Sub 

Poiché l’evento si triggers all’avvio (più volte), è ansible aggiungere una sorta di logica per impedirne l’triggerszione quando si aggiungono colonne o si riordinano le colonne in base alle impostazioni precedenti:

 Private Sub dataAnts_ColumnDisplayIndexChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles dataAnts.ColumnDisplayIndexChanged If bSortingColumns = False Then Debug.Print(e.Column.DisplayIndex & vbTab & e.Column.Name) End If End Sub 

Oppure aggiungi un gestore di eventi a livello di codice dopo aver completato il codice di avvio.

Il link MSDN.

Ti suggerisco…

1 – Fai una variabile int statica.

2 – Modifica questa variabile nel gestore :: ColumnHeaderMouseClick

3 – Scegli la tua linea con questa variabile nel gestore :: Ordinato

Esempio:

  private static int idRequetePourtriage = -1; private void dgvRequete_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { if (dgvRequete.SelectedRows.Count > 0) idRequetePourtriage = Convert.ToInt32(dgvRequete.SelectedRows[0].Cells[TEXT_colNameIdRequete].Value.ToString()); } private void dgvRequete_Sorted(object sender, EventArgs e) { desactivateGridSelected(); int rowCount = 0; Boolean isFind = false; while (rowCount < dgvRequete.Rows.Count && !isFind) { if (idRequetePourtriage == Convert.ToInt32(dgvRequete.Rows[rowCount].Cells[TEXT_colNameIdRequete].Value.ToString())) { isFind = true; activateGridSelected(); dgvRequete.Rows[rowCount].Selected = true; } rowCount++; } if (!isFind) { activateGridSelected(); } } 

Usa l’evento ColumnDisplayIndexChanged

Non so esattamente cosa stai cercando di ottenere. Se si desidera aggiungere un comportamento di ordinamento di colonne personalizzato, è ansible dare un’occhiata a questo tutorial sull’ordinamento di colonne personalizzabile .

Fondamentalmente, si cattura l’evento MouseDown e si verifica se l’utente ha fatto clic sull’intestazione di una colonna. Se lo ha fatto e vi è assegnato un evento, questo può essere eseguito.