将数据绑定到网格后,排序箭头消失,列标题看起来已被禁用

时间:2015-12-22 09:50:18

标签: vb.net datagridview

这可能是一个非常基本的问题......但找不到答案。

我正在使用VB.NET开发我的Windows应用程序。我将集合绑定到Datagridview。我只添加了一列,并尝试对其进行排序。在绑定之前,数据网格视图如下图所示。

enter image description here

在上图中,我们可以看到网格中的箭头和* ......

绑定数据后,它会消失,因此我无法按照下图所示对任何列进行排序。

enter image description here

这是代码......

 Try
            Me.Cursor = Cursors.WaitCursor
            gvBatchList.AutoGenerateColumns = False
            Dim oBatchCollection As New Batches
            oBatchCollection.LoadOngoingBatches(True)
            gvBatchList.DataSource = oBatchCollection
            lblBatchCount.Text = "Batches (" + oBatchCollection.Count().ToString + ")"
            Me.Cursor = Cursors.Arrow
        Catch ex As Exception
            Me.Cursor = Cursors.Arrow
            MessageBox.Show("Error :- " + ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

1 个答案:

答案 0 :(得分:0)

将源绑定到datagridview后,为要排序的列设置排序模式。

以下是一个例子:

    For Each col As DataGridViewColumn In myGrid.Columns
        col.SortMode = DataGridViewColumnSortMode.Programmatic
    Next

选项不可排序,自动和编程。自动将允许按标准方式进行排序,而Programmatic将允许您在排序时指定行为。尝试自动,如果它没有按照你想要的方式行事,那就做程序化。

以下是我的排序方法示例:

Private Sub myGrid_Sorting(sender As Object, e As DataGridViewCellMouseEventArgs)
    Cursor = Cursors.WaitCursor

    If myGrid.SortedColumn IsNot Nothing Then
        'If a different sort column, sort ascending and change previously sorted column to none
        If e.ColumnIndex <> myGrid.SortedColumn.Index Then
            For col = 0 To myGrid.Columns.Count - 1
                myGrid.Columns(col).HeaderCell.SortGlyphDirection = SortOrder.None
            Next
            myGrid.Columns(e.ColumnIndex).HeaderCell.SortGlyphDirection = SortOrder.Ascending
            myGrid.Sort(myGrid.Columns(e.ColumnIndex), ListSortDirection.Ascending)
        Else  'otherwise toggle the direction of the sort
            If myGrid.SortOrder = SortOrder.Ascending Then
                myGrid.Columns(e.ColumnIndex).HeaderCell.SortGlyphDirection = SortOrder.Descending
                myGrid.Sort(myGrid.Columns(e.ColumnIndex), ListSortDirection.Descending)
            Else
                myGrid.Columns(e.ColumnIndex).HeaderCell.SortGlyphDirection = SortOrder.Ascending
                myGrid.Sort(myGrid.Columns(e.ColumnIndex), ListSortDirection.Ascending)
            End If
        End If
    Else  'if grid is not already sorted, simply sort by selected column in ascending order
        myGrid.Columns(e.ColumnIndex).HeaderCell.SortGlyphDirection = SortOrder.Ascending
        myGrid.Sort(myGrid.Columns(e.ColumnIndex), ListSortDirection.Ascending)
    End If

    Cursor = Cursors.Default
End Sub