我在使用VB在DataTable中汇总一列美元金额时遇到了问题。我尝试了两种不同的方法导致两种不同的错误,我不知道如何解决。在我进入这两种方式之前,我试图解决这个问题的方法是设置:
我正在将制表符分隔文件导入DataTable。标题将自动填充文件中第一行的数据。 显示Datatable的DataGridView称为DGV_detail。
我试图求和的DGV_detail中的列出现在第3列,称为“值到最晚”。此列中包含的美元金额值类似于:$ 10.00带有美元符号和所有内容。
我也在单击按钮时声明视图变量并进行一些计算。
这是我的第一个方法:
For i As Integer = 0 To DGV_detail.Rows.Count() - 1 Step +1
interestPaidToAccounts = interestPaidToAccounts + DGV_detail.Rows(i).Cells(3).Value
Next
当我尝试这种方法时,我收到以下错误:
An unhandled exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll
Conversion from string "" to type 'Double' is not valid.
我试图用来解决问题的其他方法是(参考:在这些例子中,我创建了一个button_click函数的局部变量,它将BGV_detail.DataSource分配给dataTable1):
Dim sumObject = dataTable1.Compute("Sum(Convert(Value-to-date, 'System.Decimal'))", "[Value-to-date] IS NOT NULL")
和
Dim sumObject As Decimal = dataTable1.Compute("Sum(Value-to-date)", "")
两者都产生了以下错误:
Expecting a single column argument with possible 'Child' qualifier.
我在这一点上很失落,所以不管社区认为解决这些问题的最佳方法是,我愿意接受。
如果需要,我可以提供更多信息! :)
提前感谢您的帮助!
答案 0 :(得分:0)
美元符号是问题,使用mid删除它和val转换为数字:
val(mid(DGV_detail.Rows(i).Cells(3).Value, 2,DGV_detail.Rows(i).Cells(3).Value.length -1))
未经测试,但应该让你开始......有很多方法可以删除$。