willsHuang 发表于 2015-10-20 14:28:00

GcMultiRow 是否支援多欄位排序

您好:

我們使用 GcMultiRow 8.20.20143.0,
並且也學習到如何使用 ColumnHeaderCell.SortMode及 ColumnHeaderCell.DropDownList
來進行單欄位的 排序與篩選。

進一步想請教的是,GcMultiRow 是否能支援同時 使用 多個 Column(Cell) 的值來作為排序條件,
類似 SQL 指令中的 Order By Cell1 , Cell2, Cell3 的功能。

以上,煩請,指導一下。

謝謝

rbgongming 发表于 2015-10-20 15:37:00

回复 1楼willsHuang的帖子

你好,非常感谢你的问题反馈。
我现在的工作环境没有该控件,但是还是帮你查找了一下解决方法。
代码运行效果我没有确认,非常抱歉,你可以参照如下代码,试一试
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim template1 As Template = Template.CreateGridTemplate(2)
  GcMultiRow1.Template = template1
  GcMultiRow1.RowCount = 10
  GcMultiRow1.AllowUserToAddRows = False

  Dim r As New Random()
  For i As Integer = 0 To GcMultiRow1.RowCount - 1
    GcMultiRow1.SetValue(i, 0, r.(1, 3))
    GcMultiRow1.SetValue(i, 1, r.(1, 100))
  Next
End Sub

Private Sub GcMultiRow1_CellClick(ByVal sender As Object, ByVal e As CellEventArgs) Handles GcMultiRow1.CellClick
  If e.Scope = CellScope.ColumnHeader Then
    Dim chCell As ColumnHeaderCell = GcMultiRow1.ColumnHeaders(0).Cells(e.CellIndex)
    If chCell.SortGlyphDirection = SortOrder.Ascending Then
      chCell.SortGlyphDirection = SortOrder.Descending
    Else
      chCell.SortGlyphDirection = SortOrder.Ascending
    End If

    Dim si0 As SortItem = New SortItem(0, SortOrder.None)
    Dim si1 As SortItem = New SortItem(1, SortOrder.None)

    Select Case e.CellIndex
      Case 0
        si0.SortOrder = chCell.SortGlyphDirection
        Exit Select
      Case 1
        si0.SortOrder = DirectCast(GcMultiRow1.ColumnHeaders(0).Cells(0), ColumnHeaderCell).SortGlyphDirection
        si1.SortOrder = chCell.SortGlyphDirection
        Exit Select
    End Select

    GcMultiRow1.Sort(New SortItem() {si0, si1})

  End If
End Sub

如果不能解决你的需求,欢迎再次反馈。

willsHuang 发表于 2015-10-20 16:26:00

您好:

非常感謝您迅速的回饋,剛剛試了,已經可以了,
能否進一步,請教一下,
GcMultiRow1.Sort(New SortItem() {si0, si1})
其中,SortItem() 是否有數目上的限制呢 ...?

以上,煩請,指導一下。

謝謝

rbgongming 发表于 2015-10-20 16:33:00

回复 3楼willsHuang的帖子

你好,非常感谢你的反馈

对于这个问题我也不是特别了解,我电脑上没有这个控件的环境,不过个人认为
几十个是应该没有问题的。具体上限我也不是特别了解,这个问题还是请Alice
女神回复你吧!

再此对你使用本产品非常感谢!!!如有什么问题欢迎反馈哦!!!

Alice 发表于 2015-10-20 17:32:00

回复 3楼willsHuang的帖子

默认情况下,可以通过设置SortMode来实现单列的排序,click columnheader就会自动排序。
这种情况下,是不支持多列排序的。
但是MultiRow提供了Sort方法,可以实现更多样化的排序。Sort方法是个构造方法,里面有多样化参数。
你可以针对某一列进行升序或是降序排序,还可以继承IComparer接口,写自己的排序sort逻辑。这个接口是.net的接口,可以在网络上查到很多资料如何写。
其中一种的Sort方法就是Sort(SortItem[] sort),可以实现多个列排序,对具体的几个列没有限制,但这些SortItem的CellIndex是限制在0到MultiRow的列数之间。就是说你最多只能对Multirow的所有列进行排序,不能多与这些列。

Alice 发表于 2015-10-28 16:49:00

回复 4楼rbgongming的帖子

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢      http://gcdn.gcpowertools.com.cn/attachment.aspx?attachmentid=10062

您可以关注我们的微信服务号(微信号:GrapeCityDT),帖子有回复时可即时收到提醒,便于您第一时间查看,尽快解决技术问题。关注即可获得300金币用于兑换礼品。
页: [1]
查看完整版本: GcMultiRow 是否支援多欄位排序