2009-06-26 10 views
2

J'ai un DataGridView qui a un DataTable comme source de données. Chaque fois que je trier une colonne, puis modifier une cellule, après avoir modifié la colonne, la colonne autosorts de sorte que la cellule récemment modifiée n'est plus dans la zone visible. Est-il possible d'empêcher ce tri automatique de se produire et de trier uniquement lorsque je clique sur les colonnes?Empêcher le tri automatique des colonnes après la modification d'un DataGridView lié

Merci beaucoup à l'avance.

Daryn

Répondre

0

Je ne sais pas si cela fonctionne, mais il semble que cela pourrait. Essayez de définir le SortMode de chaque colonne (DataGridView.Columns (1) .SortMode) sur Programmatique ou NotSortable lorsque la cellule est sélectionnée pour modification, puis définissez-la sur Automatique lorsque vous avez terminé l'édition.

1

Je ne pense pas qu'il existe un moyen d'empêcher le tri, mais vous pouvez stocker les valeurs de ligne, de colonne et de tri de la grille avant la mise à jour, puis les restaurer après la mise à jour.

est ici une partie du code que j'utilise:

Friend Sub refreshGrid() 
    Dim row As Integer 
    Dim col As Integer 
    Dim gridCol As Integer 
    Dim gridColsToHide As Integer 
    Dim rowCountOrig As Integer 
    Dim rowCountNew As Integer 

    row = dgvReadOnly.CurrentRow.Index 
    col = dgvReadOnly.CurrentCell.ColumnIndex 
     Dim sortVal As String 

     sortVal = _setSource.DefaultView.Sort 
     rowCountOrig = _setSource.Rows.Count 
     _setSource = _displaySet.displaySetTable 
     rowCountNew = _setSource.Rows.Count 
     setRowFilter() 
     _setSource.DefaultView.Sort = sortVal 
     If (rowCountNew > rowCountOrig) Then ' added new row 
      row = dgvReadOnly.RowCount - 1 ' new row is at bottom of grid, but skip * row 
     End If 
    dgvReadOnly.DataSource = Nothing 
    dgvReadOnly.DataSource = _setSource 
    If row >= dgvReadOnly.RowCount - 1 Then ' after delete 
     row = dgvReadOnly.RowCount - 2 
    End If 
    If row >= 0 Then  ' if didn't delete all rows matching filter 
     dgvReadOnly.CurrentCell = dgvReadOnly(col, row) 
    End If 
End Sub 
Questions connexes