我在VB.NET-GUI上显示DataGridView。在此表中,最后一行是显示平均值的总计行。
实际上可以在列之后进行排序,但我想以某种方式修复Total-Row,使其保持最后一行。这是可能的还是某种标准行为?
答案 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。