在 RadGridView 中对货币列 VB.NET 进行排序
Sorting Currency Column VB.NET in RadGridView
我正在尝试使用自定义排序对 radgridview 中的货币列进行排序。
我能找到的唯一相关问题是这个: 但它没有提供解决方案。
我尝试使用我在下面实现的 Telerik 示例 https://docs.telerik.com/devtools/winforms/controls/gridview/sorting/custom-sorting。
Private Sub CustomSort(sender As Object, e As GridViewCustomSortingEventArgs)
Dim row1 As Decimal
Dim row2 As Decimal
If e.Row1.Cells("Pickable").Value.ToString = "" Then
row1 = 0
Else
row1 = Convert.ToDecimal(e.Row1.Cells("Pickable").Value.ToString.Substring(1))
End If
If e.Row2.Cells("Pickable").Value.ToString = "" Then
row2 = 0
Else
row2 = Convert.ToDecimal(e.Row2.Cells("Pickable").Value.ToString.Substring(1))
End If
If row1 > row2 Then
e.SortResult = 1
ElseIf row1 < row2 Then
e.SortResult = -1
Else
e.SortResult = 0
End If
End Sub
当我排序时,它为我提供了以下结果:
但是它不允许我降序排序。
任何帮助将不胜感激,谢谢!
使用下面建议的答案 - 我已经实现了点击事件。
解决方案
假设您的单元格实际包含 Strings
,试试这个:
Dim value1 As Decimal
Dim value2 As Decimal
Decimal.TryParse(CStr(e.Row1.Cells("Pickable").Value), NumberStyles.Currency, Nothing, value1)
Decimal.TryParse(CStr(e.Row2.Cells("Pickable").Value), NumberStyles.Currency, Nothing, value2)
e.SortResult = value1.CompareTo(value2)
如果空白单元格实际上是 NULL 而不是空的,那么您可以利用 DBNull.ToString
returns 空 String
:
Decimal.TryParse(e.Row1.Cells("Pickable").Value.ToString(), NumberStyles.Currency, Nothing, value1)
Decimal.TryParse(e.Row2.Cells("Pickable").Value.ToString(), NumberStyles.Currency, Nothing, value2)
关于降序排序,我不知道那个控件是怎么指示排序方向的,但是,如果你是自定义排序,我猜你自己记住吧。在这种情况下,您可以使用一个字段来指定当前方向:
Private isDescending As Boolean = True
然后您可以在每个排序上切换它,例如在调用 Sort
方法之前的 Button.Click
事件处理程序中:
isDescending = Not isDescending
然后您可以根据该方向设置比较结果:
Dim value1 As Decimal
Dim value2 As Decimal
Decimal.TryParse(e.Row1.Cells("Pickable").Value.ToString(), NumberStyles.Currency, Nothing, value1)
Decimal.TryParse(e.Row2.Cells("Pickable").Value.ToString(), NumberStyles.Currency, Nothing, value2)
e.SortResult = If(isDescending, value2.CompareTo(value1), value1.CompareTo(value2))
我正在尝试使用自定义排序对 radgridview 中的货币列进行排序。
我能找到的唯一相关问题是这个:
我尝试使用我在下面实现的 Telerik 示例 https://docs.telerik.com/devtools/winforms/controls/gridview/sorting/custom-sorting。
Private Sub CustomSort(sender As Object, e As GridViewCustomSortingEventArgs)
Dim row1 As Decimal
Dim row2 As Decimal
If e.Row1.Cells("Pickable").Value.ToString = "" Then
row1 = 0
Else
row1 = Convert.ToDecimal(e.Row1.Cells("Pickable").Value.ToString.Substring(1))
End If
If e.Row2.Cells("Pickable").Value.ToString = "" Then
row2 = 0
Else
row2 = Convert.ToDecimal(e.Row2.Cells("Pickable").Value.ToString.Substring(1))
End If
If row1 > row2 Then
e.SortResult = 1
ElseIf row1 < row2 Then
e.SortResult = -1
Else
e.SortResult = 0
End If
End Sub
当我排序时,它为我提供了以下结果:
但是它不允许我降序排序。
任何帮助将不胜感激,谢谢!
使用下面建议的答案 - 我已经实现了点击事件。
解决方案
假设您的单元格实际包含 Strings
,试试这个:
Dim value1 As Decimal
Dim value2 As Decimal
Decimal.TryParse(CStr(e.Row1.Cells("Pickable").Value), NumberStyles.Currency, Nothing, value1)
Decimal.TryParse(CStr(e.Row2.Cells("Pickable").Value), NumberStyles.Currency, Nothing, value2)
e.SortResult = value1.CompareTo(value2)
如果空白单元格实际上是 NULL 而不是空的,那么您可以利用 DBNull.ToString
returns 空 String
:
Decimal.TryParse(e.Row1.Cells("Pickable").Value.ToString(), NumberStyles.Currency, Nothing, value1)
Decimal.TryParse(e.Row2.Cells("Pickable").Value.ToString(), NumberStyles.Currency, Nothing, value2)
关于降序排序,我不知道那个控件是怎么指示排序方向的,但是,如果你是自定义排序,我猜你自己记住吧。在这种情况下,您可以使用一个字段来指定当前方向:
Private isDescending As Boolean = True
然后您可以在每个排序上切换它,例如在调用 Sort
方法之前的 Button.Click
事件处理程序中:
isDescending = Not isDescending
然后您可以根据该方向设置比较结果:
Dim value1 As Decimal
Dim value2 As Decimal
Decimal.TryParse(e.Row1.Cells("Pickable").Value.ToString(), NumberStyles.Currency, Nothing, value1)
Decimal.TryParse(e.Row2.Cells("Pickable").Value.ToString(), NumberStyles.Currency, Nothing, value2)
e.SortResult = If(isDescending, value2.CompareTo(value1), value1.CompareTo(value2))