这可能是一个非常基本的问题......但找不到答案。
我正在使用VB.NET开发我的Windows应用程序。我将集合绑定到Datagridview。我只添加了一列,并尝试对其进行排序。在绑定之前,数据网格视图如下图所示。
在上图中,我们可以看到网格中的箭头和* ......
绑定数据后,它会消失,因此我无法按照下图所示对任何列进行排序。
这是代码......
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
答案 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