簡體   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