如何在datagrid视图中对列进行排序?涉及哪些事件?

时间:2015-12-18 12:02:10

标签: vb.net sorting datagrid

我正在vb.net中开发Windows应用程序。

我有几个列的datagrid,我想对我选择的列进行排序。

如下图所示,我选择了ID列,当我点击排序按钮时,它应按升序或排序顺序排序。

(现在我不担心订单,我对代码更感兴趣。)

enter image description here

我已经检查了几个关于排序问题的问题,但是没有人回答它涉及哪些事件,他们只给出了一个代码。

到目前为止,我只能编写下面的代码来选择列,但这不起作用,因为我在代码中编写了硬编码的0列索引。

如何编写选择列和排序的代码?

 Private Sub gvBatchList_ColumnHeaderMouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles gvBatchList.ColumnHeaderMouseClick

        For Each c As DataGridViewColumn In gvBatchList.Columns
            c.SortMode = DataGridViewColumnSortMode.NotSortable
            c.Selected = False
        Next
        gvBatchList.SelectionMode = DataGridViewSelectionMode.FullColumnSelect
        gvBatchList.Columns(0).Selected = True
    End Sub

Imp注意:我正在使用Access数据库存储记录并在将记录绑定到网格视图时使用集合。

下面的代码显示了我如何绑定记录....

 Private Sub LoadAllRegularEmployees()
        Try
            Me.Cursor = Cursors.WaitCursor
            DataGridView1.AutoGenerateColumns = False
            Dim oEmployees As New Employees
            oEmployees.LoadAllRegularEmployees()
            DataGridView1.DataSource = oEmployees
            lblEmployeesCount.Text = "Toal Employees (" + oEmployees.Count().ToString + ")"
            txtEmployeeSearch.Focus()
            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

    End Sub

2 个答案:

答案 0 :(得分:0)

修改

如果一开始你没有成功......等等。

Select Case sortDescending
    Case True
        gvBatchList.Sort(gvBatchList.SelectedColumns(0), ListSortDirection.Ascending)
        sortDescending = False
    Case Else
        gvBatchList.Sort(gvBatchList.SelectedColumns(0), ListSortDirection.Descending)
        sortDescending = True
End Select

在这里,我定义了一个布尔sortDescending,并用它来检查我们排序的方式。我将其初始化为False,但如果您希望它首先按升序排序,则只需将其初始化为True

您还必须导入System.ComponentModel才能使用ListSortDirection

希望这样做!

我认为这就是你所要求的:

gvBatchList.Sort(gvBatchList.SelectedColumns(0), SortOrder.Ascending)

或者,您可以使用SortOrder.Descending向另一个方向排序。也许是这样的?

Select Case gvBatchList.SelectedColumns(0).SortMode
    Case SortOrder.Descending
        gvBatchList.Sort(gvBatchList.SelectedColumns(0), SortOrder.Ascending)
    Case Else
        gvBatchList.Sort(gvBatchList.SelectedColumns(0), SortOrder.Descending)
End Select

如果您的用户没有选择列,我无法保证会发生什么。

答案 1 :(得分:0)

objSort = objSort.OrderBy(Function(x)x.Assembly)。ToArray()