按隐藏列

时间:2015-09-16 18:33:57

标签: vb.net sorting datagridview

我有DataGridView绑定到绑定到BindingSource的{​​{1}}。对于大多数列,默认排序顺序很好,但对于其中一列,显示的数据不适合排序,我在{{1}中有一个隐藏的计算列DataSet为该列做出更好的排序。

问题是SortCol,我有代码将排序重定向到DataSet没有被调用。我已经谷歌搜索了几个小时,似乎每个人都说在SortCompare设置SortCol属性时SortCompare未被使用 - 它期望绑定DataSource执行排序 - 然后删除主题,而不提供有关如何实际执行排序的任何建议。

我查看了DataGridViewDataSource,我没有看到任何公开的界面进行自定义排序。我已准备好派出自己的BindingSource来做这件事了,但是我希望有一种不那么令人头疼的事情。简单。

编辑:由于似乎存在一些混淆,我想澄清一点,我不是在询问如何在DataSetBindingSource上执行初始设置。这是微不足道的。我特别询问如何将点击一个列标题链接到基于另一列的排序(或更一般地通过其他标准)。

我现在正在研究是否可以将DataSet设置为DataGridView,因为简单的方法似乎不存在。

更新:没有骰子 - 使用一次Programmatically重载会将SortMode放在隐藏列上,另一个则会出错:Sort

更新:除非您在之后将SortGlyph 设置为另一列。我想这就是我必须采用的解决方案;虽然我认为如果其他人想出一个更好的答案以供将来参考,我会保持开放状态。

1 个答案:

答案 0 :(得分:2)

我最终使用的解决方案是将SortMode设置为Programmatic并处理' ColumnHeaderMouseClick'事件如下:

    Private Sub DG_ColumnHeaderMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DG.ColumnHeaderMouseClick
        If DG.Columns(e.ColumnIndex) Is NonSortColumn Then
            Select Case NonSortColumn.HeaderCell.SortGlyphDirection
                Case SortOrder.Ascending
                    DG.Sort(SortColumn, System.ComponentModel.ListSortDirection.Descending)
                    NonSortColumn.HeaderCell.SortGlyphDirection = SortOrder.Descending
                Case Else
                    DG.Sort(SortColumn, System.ComponentModel.ListSortDirection.Ascending)
                    NonSortColumn.HeaderCell.SortGlyphDirection = SortOrder.Ascending
            End Select
        End If
    End Sub

与处理SortCompare事件或来自BindingSourceDataSet的同等事件相比,它仍然感觉像是一个混乱,但至少它似乎有效。< / p>