[VB.NET] การคำนวณหาจำนวนวันหยุดเสาร์ - อาทิตย์ ตามช่วงเวลาที่เรากำหนด
http://www.g2gnet.com/webboard/images/vbnet/countholiday.pngหลักการคิด: คำนวณหาจำนวนวันที่เลือกจากวันที่เริ่มต้นและวันที่สิ้นสุด จากนั้นทำการลูปตามจำนวนช่วงวันที่เลือก ทำการแยกแยะตาม DayOfWeek ออกมา โดยที่วันอาทิตย์ (Sunday) มีค่าเป็น 0 ส่วนวันเสาร์มีค่าเป็น 6 (สำหรับ Visual Basic.NET) ...
มาดูโค้ดกันเถอะ ...
Public Class frmCountHoliday
' / -----------------------------------------------------------------------------
'// Check Holiday
Private Sub btnCalHoliday_Click(sender As System.Object, e As System.EventArgs) Handles btnCalHoliday.Click
Dim CountSun As Integer = 0
Dim CountSat As Integer = 0
Dim StartDate As DateTime = Convert.ToDateTime(dtpStartDate.Text)
Dim EndDate As DateTime = Convert.ToDateTime(dtpEndDate.Text)
'// Find the number of days to loop.
Dim TotalDays = (EndDate - StartDate).TotalDays
'MsgBox(TotalDays)
Call SetupDataGrid()
For i = 0 To TotalDays
'// https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.dateandtime.weekday?view=netframework-4.8
'// Check that the DayOfWeek value.
Dim weekday As DayOfWeek = Convert.ToDateTime(dtpStartDate.Text).AddDays(i).DayOfWeek
Dim MyFormatDate As String = "dd/MM/yyyy"
'// FirstDayOfWeek.Saturday = 6
If weekday = DayOfWeek.Saturday Then
If chkSaturday.Checked Then
CountSat += 1
Dim row As String() = {Convert.ToDateTime(dtpStartDate.Text).AddDays(i).ToString(MyFormatDate), DayOfWeek.Saturday.ToString, DayOfWeek.Saturday}
dgvData.Rows.Add(row)
End If
End If
'// FirstDayOfWeek.Sunday = 0 (Default)
If weekday = DayOfWeek.Sunday Then
If chkSunday.Checked Then
CountSun += 1
Dim row As String() = {Convert.ToDateTime(dtpStartDate.Text).AddDays(i).ToString(MyFormatDate), DayOfWeek.Sunday.ToString, DayOfWeek.Sunday}
dgvData.Rows.Add(row)
End If
End If
Next
lblSaturday.Text = CountSat & " "
lblSunday.Text = CountSun & " "
End Sub
Private Sub frmCountHoliday_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
lblSaturday.Text = ""
lblSunday.Text = ""
End Sub
' / -----------------------------------------------------------------------------
'// Initialize DataGridView @Run Time
Private Sub SetupDataGrid()
With dgvData
.Columns.Clear()
.Rows.Clear()
.RowHeadersVisible = False
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToResizeRows = False
.MultiSelect = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.ReadOnly = True
.Font = New Font("Tahoma", 9)
' Autosize Column
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
.AutoResizeColumns()
'// Even-Odd Color
.AlternatingRowsDefaultCellStyle.BackColor = Color.Orange
' Adjust Header Styles
With .ColumnHeadersDefaultCellStyle
.BackColor = Color.Navy
.ForeColor = Color.Black ' Color.White
.Font = New Font("Tahoma", 9, FontStyle.Bold)
End With
End With
'// Declare columns type.
Dim Column1 As New DataGridViewTextBoxColumn()
Dim Column2 As New DataGridViewTextBoxColumn()
Dim Column3 As New DataGridViewTextBoxColumn()
'// Add new Columns
dgvData.Columns.AddRange(New DataGridViewColumn() { _
Column1, Column2, Column3 _
})
With dgvData
.Columns(0).Name = "Date"
.Columns(1).Name = "Day"
.Columns(2).Name = "Day of Week"
End With
End Sub
End Class
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...
แจ่มเลยครับ ขอบพระคุณอย่างสูงครับ อาจารย์ {:2_31:} ขอบคุณครับ
หน้า:
[1]