2014-12-03 41 views
1

DataGridView.Sorted当用户单击标题对网格进行排序时触发。我怎样才能以编程方式告诉哪个列标题被点击?和/或哪一列被分类?DataGridView.Sorted hwo告诉哪列被排序?

我厌倦了下面的代码,但Sorted事件在点击事件之前触发。任何一个子事件都没有帮助。

我可以将调用GreenBar移动到click事件,但这看起来像个坏主意,因为它取决于触发顺序异常。

Private Sub dgvMAFTrans_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvMAFTrans.ColumnHeaderMouseClick 
    msLastMAFHeaderClicked = dgvMAFTrans.Columns(e.ColumnIndex).Name 
End Sub 
Private Sub dgvMAFTrans_Sorted(sender As Object, e As EventArgs) Handles dgvMAFTrans.Sorted 
    Application.DoEvents() 
    GreenBar(dgvMAFTrans, msLastMAFHeaderClicked) 
End Sub 

代码添加绿条影响:

Sub GreenBar(dgvRef As DataGridView, ColumnName As String) 
    Dim sLastTrans As String = "" 
    Dim bAddColor As Boolean = False 
    If dgvRef.RowCount = 0 Then Exit Sub 
    Try 
     sLastTrans = dgvRef.Rows(0).Cells(ColumnName).Value 
    Catch ex As Exception 
     Exit Sub ' no transid 
    End Try 
    For Each row As DataGridViewRow In dgvRef.Rows 
     If row.Cells(ColumnName).Value <> sLastTrans Then 
      bAddColor = Not bAddColor 
      sLastTrans = row.Cells(ColumnName).Value 
     End If 
     If bAddColor Then 
      row.DefaultCellStyle.BackColor = Color.LightGreen 
     End If 
    Next 
End Sub 

回答

1

您可以检查DataGridViewSortedColumn属性,看看哪些列进行了排序。

另一个有用的属性是SortOrder属性。

+0

不幸的是,当网格被加载时,只有SortedColumn是Nothing,所以它不是一个完美的解决方案,但它在第一次显示后对用户排序起作用。 – rheitzman 2014-12-12 19:18:41

+0

属性的值由用户单击列标题进行排序(如果已启用)或通过手动调用数据网格视图上的排序来设置。默认情况下,它假定行是无序的。如果在填充它时对它们进行了排序,则可能需要调用[DataGridView.Sort](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.sort%28v=vs。 110%29.aspx)确保它已设置(这也确保排序箭头字形在列上正确设置。 – Anthony 2014-12-12 19:41:42