禁用DataGridView中的一行排序

时间:2013-04-03 07:58:32

标签: vb.net datagridview

我在VB.NET-GUI上显示DataGridView。在此表中,最后一行是显示平均值的总计行。

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

1 个答案:

答案 0 :(得分:2)

似乎 TotalRow 属性不存在。

通过使用自定义订购功能,可以肯定。

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

您需要以某种方式识别 TotalRow ,因此您可以将其Tag属性设置为字符串"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-betically。

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

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

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

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