gpt4 book ai didi

vb.net - 按隐藏列对 DataGridView 进行排序

转载 作者:行者123 更新时间:2023-12-02 08:46:23 26 4
gpt4 key购买 nike

我有一个DataGridView绑定(bind)到 BindingSource绑定(bind)到 DataSet 。对于大多数列,默认排序顺序很好,但对于其中一列,显示的数据不适合排序,并且我有一个隐藏的计算列 SortColDataSet以便对该列进行更好的排序。

问题是,SortCompare ,其中我有代码将排序重定向到 SortCol没有被叫到。我已经在谷歌上搜索了几个小时,似乎每个人都这么说SortCompareDataSource 时不使用属性设置为 DataGridView - 它期望边界 DataSource执行排序 - 然后主题被删除,没有任何关于如何实际执行排序的建议。

我查看了BindingSourceDataSet ,并且我没有看到任何用于进行自定义排序的公开接口(interface)。我已经准备好导出我自己的 BindingSource做到这一点,但我希望有一种方法可以让事情变得更简单,不那么令人头疼。

编辑:由于似乎存在一些困惑,我想澄清一下,我并不是在问如何在 DataSet 上执行初始设置。甚至在DataGridView上。那是微不足道的。我特别询问如何将点击一个列标题链接到基于另一列(或更一般地按其他标准)的排序。

我现在正在研究是否可以让它与 Programmatically 一起工作设置为SortMode ,因为似乎不存在简单的方法。

更新:没有骰子 - 使用一个 Sort过载将SortGlyph在隐藏列上,另一个给出错误:DataGridView control is data-bound. The control cannot use the comparer to perform the sort operation.

更新:除非您设置 SortGlyph 按另一列排序之后。我想这就是我必须采用的解决方案;不过我想我会保留这个开放性,以防其他人提出更好的答案以供将来引用。

最佳答案

我最终使用的解决方案是将 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 的等效事件相比,它仍然感觉有点困惑,但是至少它看起来有效。

关于vb.net - 按隐藏列对 DataGridView 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32616135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com