Kin*_*Loo 0 vb.net multidimensional-array
VB初学者在这里。我需要创建的数组是3列100行。第一列将是一个整数,每行将增加2。第二列将是增加15天的日期。第三栏与第二栏相似,但从另一天开始。
我在下面尝试过一些代码,但是仍然不知道该怎么做。非常感谢您能帮助我解决这个问题。
Private Sub AutopayPayPeriod()
Dim row As Int32
Dim AutopayArray(0 To 10, 0 To 2)
Dim RCN As Int32 = row
Dim PayPeriodStart, PayPeriodEnd As Date
Dim index As Int32
RCN = 1
PayPeriodStart = Format(#12/12/2015#, "Short Date")
PayPeriodEnd = Format(#12/25/2015#, "Short Date")
For index = 1 To AutopayArray.Length - 1
AutopayArray(0, 2) = {RCN, PayPeriodStart, PayPeriodEnd}
PayPeriodStart = PayPeriodStart.AddDays(15)
PayPeriodEnd = PayPeriodEnd.AddDays(15)
RCN += 2
index += 1
Array.Resize(ByRef AutopayArray, (AutopayArray.Length+=1))
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
多维数组是错误的数据结构,因为您具有不同的数据类型。而且,在代码中使用纯数组会掩盖代码的意图,因为没有适当的文档,没人能猜出这些条目的含义。
您应该使用正确输入的Class或Structure,具体取决于您的使用方式。在下面,我显示带有的变体Class:
Class PeriodInformation
Public Property RCN As Integer
Public Property StartDate As Date
Public Property EndDate As Date
End Class
Run Code Online (Sandbox Code Playgroud)
您可能要更改的第二件事是使用a List(Of PeriodInformation)而不是数组,因为添加和删除项要简单得多。如果您坚持使用数组,请在开始时调整大小,而不是每次调整大小。
最后,不要使用日期的字符串表示形式。使用实际日期。
然后,代码如下所示:
Private Function AddAutoPayPeriods(firstPayPeriodStart As Date, firstPayPeriodEnd As Date, firstPayPeriodRCN As Integer, numberOfPeriods As Integer) As List(Of PeriodInformation)
Dim result As New List(Of PeriodInformation)
For i As Integer = 1 To numberOfPeriods
result.Add(New PeriodInformation With {.RCN = firstPayPeriodRCN, .StartDate = firstPayPeriodStart, .EndDate = firstPayPeriodEnd})
firstPayPeriodStart = firstPayPeriodStart.AddDays(15)
firstPayPeriodEnd = firstPayPeriodEnd.AddDays(15)
firstPayPeriodRCN += 2
Next
Return result
End Function
Run Code Online (Sandbox Code Playgroud)
然后我们可以像下面这样调用该函数:
Dim periods = AddAutoPayPeriods(#12/12/2015#, #12/25/2015#, 1, 10)
Run Code Online (Sandbox Code Playgroud)
最后通过简单地打印所有元素来检查我们得到了什么:
For Each period In periods
Console.WriteLine($"{period.RCN}: {period.StartDate:d} - {period.EndDate:d}")
Next
Run Code Online (Sandbox Code Playgroud)
哪些印刷品
1: 12-Dec-15 - 25-Dec-15
3: 27-Dec-15 - 09-Jan-16
5: 11-Jan-16 - 24-Jan-16
7: 26-Jan-16 - 08-Feb-16
9: 10-Feb-16 - 23-Feb-16
11: 25-Feb-16 - 09-Mar-16
13: 11-Mar-16 - 24-Mar-16
15: 26-Mar-16 - 08-Apr-16
17: 10-Apr-16 - 23-Apr-16
19: 25-Apr-16 - 08-May-16
Run Code Online (Sandbox Code Playgroud)
.net中另一个有用的类是DataTable。当处理行和列时,这可能是一个很好的选择。
Private Function CreatePayPeriods(RCN As Integer, PayPeriodStart As Date, PayPeriodEnd As Date, NumberOfPeriods As Integer) As DataTable
Dim dt As New DataTable()
dt.Columns.Add("RCN", GetType(Integer))
dt.Columns.Add("Pay Period Start Date", GetType(Date))
dt.Columns.Add("Pay Period End Date", GetType(Date))
For i = 1 To NumberOfPeriods
dt.Rows.Add(RCN, PayPeriodStart, PayPeriodEnd)
PayPeriodStart = PayPeriodStart.AddDays(15)
PayPeriodEnd = PayPeriodEnd.AddDays(15)
RCN += 2
Next
Return dt
End Function
Run Code Online (Sandbox Code Playgroud)
看结果
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
DataGridView1.DataSource = CreatePayPeriods(1, #1/02/2017#, #1/9/2017#, 100)
End Sub
Run Code Online (Sandbox Code Playgroud)