【发布时间】:2016-03-31 18:16:46
【问题描述】:
我有一个从数据源填充的 gridview,如下所示:
Date Hours
January/2016 26.31
January/2016 25.65
February/2016 12.3
.... ... ....
从该表中,我检查每个月的周数并计算它们,以便稍后获得平均值,这是我的代码。
For intMonth = 1 To 12
For X = 0 To GridView.Rows.Count - 1
intDate = Convert.ToDateTime(gvTiempos.Rows(X).Cells(0).Text)
If DatePart("m", intDate) = intMonth Then
Calcular()
End If
Next
Next
这是Calcular() 函数:
Public Function Calcular()
Select Case intMonth
Case 1: JanWeeks+=1
Case 2: FebWeeks+=1
...
Case 12: DecWeeks+=1
我想做的是避免整个 Calcular() 函数,并“动态地”执行它。
换句话说,我想得到这样的东西:
Weeks(intMonth) = "Sum of Weeks for that month"
intMonth 决定 Sum 将存储在哪个 WeekVariable 中。
根据我的理解,我尝试使用 List(Of T) 方法失败了,因为这会创建一个具有静态值的变量列表。
提前致谢
【问题讨论】:
-
你可以使用字典
colMonths(intMonth) +=1如果你有一个数据源,你应该使用它而不是控件。您可能会写一个 linq 查询并一次获得所有 12(?) 个结果。看起来你应该打开 Option Strict -
您最好使用数组。然后只需使用
Weeks(intMonth) = Weeks(intMonth) + 1。附带说明一下,您可以删除此行:intDate = GridView.Rows(X).Cells(0).Text。它的值没有被使用,你正在下一行重新分配它。 -
@Icemanind 是的,是的,那一行是正确的,只是编辑了代码,是一个拼写错误的行。关于
Weeks(intMonth) = Weeks(intMonth) + 1,它抛出了这个错误:索引超出范围。必须是非负数且小于集合的大小。 -
@abichango - 你声明了吗? :
Dim Weeks(12) As Integer -
@Plutonix 你能解释一下字典方法吗,我在我的问题之前确实找过它,但不太明白。关于 Option Strict 这是一个我几乎没有参与的庞大项目,如果我打开它,我不知道其他表单会出现什么问题:/
标签: .net vb.net collections