在RadGridView中对货币列VB.NET进行排序
我正在尝试使用自定义排序对radgridview中的货币列进行排序 我能找到的另一个相关问题是:但它没有提供解决方案 我尝试使用我在下面实现的Telerik示例在RadGridView中对货币列VB.NET进行排序,vb.net,sorting,currency,radgridview,columnsorting,Vb.net,Sorting,Currency,Radgridview,Columnsorting,我正在尝试使用自定义排序对radgridview中的货币列进行排序 我能找到的另一个相关问题是:但它没有提供解决方案 我尝试使用我在下面实现的Telerik示例 Private Sub CustomSort(sender As Object, e As GridViewCustomSortingEventArgs) Dim row1 As Decimal Dim row2 As Decimal If e.Row1.Cells("Pickable").
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
Private Sub-CustomSort(发送方作为对象,e作为GridViewCustomSortingEventArgs)
将行1设置为十进制
将第2行变暗为十进制
如果e.Row1.Cells(“可拾取”).Value.ToString=“”则
第1行=0
其他的
row1=Convert.ToDecimal(如row1.Cells(“Pickable”).Value.ToString.Substring(1))
如果结束
如果e.Row2.单元格(“可拾取”).Value.ToString=“”,则
第2行=0
其他的
row2=Convert.ToDecimal(例如,row2.Cells(“可拾取”).Value.ToString.Substring(1))
如果结束
如果第1行>第2行,则
e、 SortResult=1
如果第1行小于第2行,则
e、 SortResult=-1
其他的
e、 SortResult=0
如果结束
端接头
排序时,它会提供以下结果:
但是那样的话,我就不能按降序排序了
任何帮助都将不胜感激,谢谢
使用下面建议的答案-我已经实现了一个点击事件。
解决方案
假设您的单元格实际包含
字符串,请尝试以下操作:
尺寸值1为十进制
以十进制表示的尺寸值2
Decimal.TryParse(CStr(e.Row1.Cells(“Pickable”).Value)、numberstyle.Currency、Nothing、value1)
Decimal.TryParse(CStr(e.Row2.Cells(“Pickable”).Value)、numberstyle.Currency、Nothing、value2)
e、 SortResult=value1.与(value2)进行比较
如果空白单元格实际上是NULL而不是空的,那么可以利用以下事实:<代码> dBuln.toString 返回空<代码>字符串 >:
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为布尔值=True
然后,您可以在每次排序时切换该选项,例如在按钮中。在调用排序方法之前,单击事件处理程序:
isDescending=不isDescending
然后,可以基于该方向设置比较结果:
尺寸值1为十进制
以十进制表示的尺寸值2
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))
您好,是的,这是一个字符串列。它抛出了一个“从类型'DBNull'到类型'String'的转换是无效的。”错误,关于你的示例,我如何处理空值的转换?我添加了.ToString(),它现在运行,没有错误,但所有结果都被置乱了,请参阅我的帖子我将发布一个屏幕快照啊,我知道为什么会发生这种情况。我在切换方向,好像事件在每个排序中引发一次,但事实并非如此。如果需要执行足够的比较以对数据进行排序,则会多次提出该值。这意味着您需要为每个排序切换一次isDirection
字段。我不知道你会怎么做,因为我不知道你是怎么开始的。例如,如果您正在单击一个按钮
并调用一个排序
方法,则在调用排序
之前,您将切换该字段。在radgridview列标题上单击鼠标即可激活排序,我已经尝试在radgrid上实现一个点击事件,我已经在我的回答中发布了结果,使用您的答案结合telerik的“我已经实现了我想要的结果”。谢谢你的帮助!