繁体   English   中英

vb.net:如何将值动态分配给变量列表

[英]vb.net: How to assign values to a list of variables dynamically

我有一个从数据源填充的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决定将和存储在WeekVariable中的位置。
根据我的理解,我尝试使用List(Of T)方法失败,因为这会创建具有静态值的变量列表。

提前致谢

给定一个DataTable dt作为DataSource并且单元格/项目1(非0)的日期已格式化,则可以创建一个Dictionary(of Int32, Int32)来保存每个月的计数。 迭代表应该比在控件上戳更快。 此外, DataTable是数据所在的位置。

Dim col As New Dictionary(Of Int32, Int32)
' create 12 keys for 12 months
For n As Int32 = 1 To 12
    col.Add(n, 0)
Next

For Each row As DataRow In dt.Rows
    col(Convert.ToDateTime(row(1)).Month) += 1
Next

有些插槽将为零,因为代码会提前添加它们。 List(Of Int32)也可以使用MonthList(n)表示N-1个月。 您也可以只查询表,分组和计数的一行:

Dim monthCount = dt.AsEnumerable.GroupBy(Function(v) v.Field(Of DateTime)(1).Month,
                            Function(k, v) New With {.Month = k, .Count = v.Count()}).
                       ToArray()

在这种情况下,结果是带有月份和计数的简洁列表(我的日期列表是: {#1/11/2016#, #1/23/2016#, #1/16/2016#, #2/11/2016#, #4/15/2016#} ):

在此处输入图片说明

根据我们在您的评论中的谈话,您应该可以轻松地做到这一点:

Dim Weeks(12) As Integer

然后将您对Calcular()调用替换为:

If DatePart("m", intDate) = intMonth Then
    Weeks(intMonth) = Weeks(intMonth) + 1
End If

这将创建一个数组来保存一年(12个月)中每个月的总和。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM