2

我在我的 VB.NET-GUI 上显示了一个 DataGridView。在该表中,最后一行是显示平均值的 Total-Row。

在列之后排序实际上必须是可能的,但我想以某种方式修复 Total-Row 以便它保持最后一行。这是可能的还是某种标准行为?

4

1 回答 1

2

似乎TotalRow属性不存在。

可以肯定的是,通过使用自定义排序功能。

首先,确保所有列都SortMode设置为Automatic.

您需要以某种方式识别您的TotalRow,因此您可以将其Tag属性设置为 string "Average"

row.Tag = "Average"

然后添加此代码:

Private Sub DataGridView1_SortCompare(sender As Object,
        e As DataGridViewSortCompareEventArgs) Handles DataGridView1.SortCompare

    If (DataGridView1.Rows(e.RowIndex1).Tag = "Average") Then
        e.SortResult = If(DataGridView1.SortOrder = SortOrder.Ascending, 1, -1)
    ElseIf (DataGridView1.Rows(e.RowIndex2).Tag = "Average") Then
        e.SortResult = If(DataGridView1.SortOrder = SortOrder.Ascending, -1, 1)
    Else
        e.SortResult = System.String.Compare(e.CellValue1.ToString(),
                                             e.CellValue2.ToString())
    End If

    e.Handled = True

End Sub

这会成功的!

编辑 :

既然您谈到了平均值,我假设您想按元素的数值而不是按 ASCII 顺序排列元素。

如果您确定您的 DataGridView 将只包含数字,您可以使用大于运算符而不是String.Compare最后一个 if 分支中的运算符:

e.SortResult = If(e.CellValue1 > e.CellValue2, 1, -1)

这样,您的号码将正确排序(10, 20, 100, 200而不是10, 100, 20, 200)。

如果需要比较字符串数字,我会寻找一种Natural String Compare algorithm

于 2013-04-03T08:09:59.270 回答