我在我的 VB.NET-GUI 上显示了一个 DataGridView。在该表中,最后一行是显示平均值的 Total-Row。
在列之后排序实际上必须是可能的,但我想以某种方式修复 Total-Row 以便它保持最后一行。这是可能的还是某种标准行为?
我在我的 VB.NET-GUI 上显示了一个 DataGridView。在该表中,最后一行是显示平均值的 Total-Row。
在列之后排序实际上必须是可能的,但我想以某种方式修复 Total-Row 以便它保持最后一行。这是可能的还是某种标准行为?
似乎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。