Public Class 自動點燈系統 Dim 新流水1 As String Private Sub 自動點燈系統_Load(sender As Object, e As EventArgs) Handles MyBase.Load 明細表_dgv.BringToFront() SQL_燈年份() : 年度_cb.Items.Clear() : While (dr.Read()) : 年度_cb.Items.Add(dr("年度")) : End While : conn.Close() Dim 年度 As Integer = DateTime.Now.Year Dim 民國年份 As Integer = 年度 - 1911 年度_cb.Text = 民國年份.ToString() 明細表_dgv.Enabled = False Set_清單1() : Set_清單2() : PA = 年度_cb.Text : Set_清單7() : Set_清單3() : Set_清單4() End Sub Private Sub 年度_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 年度_cb.SelectedIndexChanged PA = 年度_cb.Text : Set_清單7() : Set_清單3() : Set_清單4() End Sub Private Sub Set_清單1() Dim ds1 As New DataSet : 控制表_dgv.DataSource = Nothing : ds1.Clear() 控制表_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 控制表_dgv.ColumnHeadersHeight = 30 : 控制表_dgv.AllowUserToAddRows = False : 控制表_dgv.RowTemplate.Height = 30 SQL_自動點燈_控制表清單() da.Fill(ds1) : 控制表_dgv.DataSource = ds1.Tables(0) : conn.Close() Dim newFont As New System.Drawing.Font("微軟正黑體", 9) ' 創建一個新字體,Arial 12pt 控制表_dgv.RowsDefaultCellStyle.Font = newFont 控制表_dgv.Columns(0).FillWeight = 60 : 控制表_dgv.Columns(8).FillWeight = 40 : 控制表_dgv.Columns(11).Visible = False 控制表_dgv.Columns(1).Visible = False : 控制表_dgv.Columns(2).Visible = False : 控制表_dgv.Columns(10).Visible = False 控制表_dgv.Columns(3).Visible = False : 控制表_dgv.Columns(4).Visible = False : 控制表_dgv.Columns(5).Visible = False 控制表_dgv.Columns(6).Visible = False : 控制表_dgv.Columns(7).Visible = False : 控制表_dgv.Columns(9).Visible = False Dim rowsToRemove As New List(Of Integer) For i As Integer = 0 To 控制表_dgv.Rows.Count - 1 PA2 = 控制表_dgv.Rows(i).Cells("單號").Value.ToString : Set_清單8() Dim rowShouldBeRemoved As Boolean = True ' 如果控制表1_dgv 沒有任何資料,也将该行添加到需要删除的列表中 If 控制表1_dgv.Rows.Count = 0 Then : rowShouldBeRemoved = True : Else ' 假如 控制表1_dgv 內有任一筆資料是 true,保留该行 For j As Integer = 0 To 控制表1_dgv.Rows.Count - 1 Dim row As DataGridViewRow = 控制表1_dgv.Rows(j) Dim rowHasTrueValue As Boolean = False For k As Integer = 1 To 10 Dim columnName As String = "CH" & k.ToString() If Not DBNull.Value.Equals(row.Cells(columnName).Value) AndAlso Convert.ToBoolean(row.Cells(columnName).Value) Then rowHasTrueValue = True : Exit For End If Next : If rowHasTrueValue Then : rowShouldBeRemoved = False : Exit For : End If Next End If : If rowShouldBeRemoved Then : rowsToRemove.Add(i) : End If Next ' 倒序删除要删除的行,以避免索引错误 For i As Integer = rowsToRemove.Count - 1 To 0 Step -1 : 控制表_dgv.Rows.RemoveAt(rowsToRemove(i)) : Next End Sub Private Sub Set_清單2() 明細表_dgv.Columns.Clear() Dim ds2 As New DataSet : 明細表_dgv.DataSource = Nothing : ds2.Clear() 明細表_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 明細表_dgv.ColumnHeadersHeight = 30 : 明細表_dgv.AllowUserToAddRows = False : 明細表_dgv.RowTemplate.Height = 30 PA = 年度_cb.Text : PA1 = 單號_tb.Text : Set_清單7() : Set_清單5() : Set_清單3() : Set_清單4() : SQL2 = "" For i As Integer = 0 To 明細表2_dgv.Rows.Count - 1 : SQL2 &= " AND (編號 NOT LIKE N'" & 明細表2_dgv("科目編號", i).Value.ToString & "')" : Next SQL_燈科目讀取1() : 科目_cb.Items.Clear() : 編號_cb.Items.Clear() While (dr.Read()) : 科目_cb.Items.Add(dr("會計科目")) : 編號_cb.Items.Add(dr("編號")) : End While : conn.Close() Dim CN00 As String = "姓名" : Dim NC00 As New DataGridViewTextBoxColumn With {.HeaderText = CN00, .Name = CN00, .FillWeight = 30} : 明細表_dgv.Columns.Add(NC00) Dim CN01 As String = "查" : Dim NC01 As New DataGridViewImageColumn With {.HeaderText = CN01, .Name = CN01, .FillWeight = 15} : 明細表_dgv.Columns.Add(NC01) Dim CN011 As String = "性別" : Dim NC011 As New DataGridViewTextBoxColumn With {.HeaderText = CN011, .Name = CN011, .FillWeight = 20} : 明細表_dgv.Columns.Add(NC011) Dim CN012 As String = "生肖" : Dim NC012 As New DataGridViewTextBoxColumn With {.HeaderText = CN012, .Name = CN012, .FillWeight = 20} : 明細表_dgv.Columns.Add(NC012) Dim CN02 As String = "會計科目" : Dim NC02 As New DataGridViewTextBoxColumn With {.HeaderText = CN02, .Name = CN02, .FillWeight = 40} : 明細表_dgv.Columns.Add(NC02) Dim CN03 As String = "課目編號" : Dim NC03 As New DataGridViewTextBoxColumn With {.HeaderText = CN03, .Name = CN03, .FillWeight = 40} : 明細表_dgv.Columns.Add(NC03) Dim CN04 As String = "內容" : Dim NC04 As New DataGridViewTextBoxColumn With {.HeaderText = CN04, .Name = CN04, .FillWeight = 130} : 明細表_dgv.Columns.Add(NC04) Dim CN05 As String = "非點燈收款" : Dim NC05 As New DataGridViewTextBoxColumn With {.HeaderText = CN05, .Name = CN05, .FillWeight = 50} : 明細表_dgv.Columns.Add(NC05) For i As Integer = 0 To 明細表1_dgv.Rows.Count - 1 Dim columnName1 As String = 明細表1_dgv(0, i).Value.ToString Dim newColumn1 As New DataGridViewCheckBoxColumn With { .HeaderText = columnName1, .Name = columnName1, .FillWeight = 20 ' 設定欄位寬度為 30 } 明細表_dgv.Columns.Add(newColumn1) Next Dim CN06 As String = "金額" : Dim NC06 As New DataGridViewTextBoxColumn With {.HeaderText = CN06, .Name = CN06, .FillWeight = 40} : 明細表_dgv.Columns.Add(NC06) Dim CN07 As String = "項" : Dim NC07 As New DataGridViewTextBoxColumn With {.HeaderText = CN07, .Name = CN07, .FillWeight = 40} : 明細表_dgv.Columns.Add(NC07) Dim newFont As New System.Drawing.Font("微軟正黑體", 9) ' 創建一個新字體,Arial 12pt 明細表_dgv.ColumnHeadersDefaultCellStyle.Font = newFont : 明細表_dgv.RowsDefaultCellStyle.Font = newFont 明細表_dgv.EditMode = DataGridViewEditMode.EditOnEnter 明細表_dgv.Columns("金額").ReadOnly = True : 明細表_dgv.Columns("會計科目").ReadOnly = True 明細表_dgv.Columns("性別").ReadOnly = True : 明細表_dgv.Columns("生肖").ReadOnly = True 明細表_dgv.Columns("課目編號").Visible = False : 明細表_dgv.Columns("項").Visible = False 明細表_dgv.Columns("查").Visible = False : 明細表_dgv.Columns("會計科目").Visible = False 明細表_dgv.Columns("內容").Visible = False : 明細表_dgv.Columns("非點燈收款").Visible = False 明細表_dgv.Columns("金額").Visible = False 明細表_dgv.Columns("金額").DefaultCellStyle.Format = "#,##0" : 明細表_dgv.Columns("非點燈收款").DefaultCellStyle.Format = "#,##0" 明細表_dgv.Columns("非點燈收款").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight 明細表_dgv.Columns("非點燈收款").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight 明細表_dgv.Columns("金額").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight 明細表_dgv.Columns("金額").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight 明細表_dgv.Columns("姓名").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 明細表_dgv.Columns("姓名").HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter Dim mycol1 As DataGridViewImageColumn = 明細表_dgv.Columns("查") : mycol1.ImageLayout = DataGridViewImageCellLayout.Zoom If 收款_dgv.Rows.Count > 0 Then Dim 數量 As Integer = 明細表1_dgv.Rows.Count + 5 For i As Integer = 0 To 收款_dgv.Rows.Count - 1 : Set_明細() 明細表_dgv("姓名", 0).Value = 收款_dgv("姓名", i).Value.ToString : 明細表_dgv("會計科目", 0).Value = 收款_dgv("會計科目", i).Value.ToString 明細表_dgv("課目編號", 0).Value = 收款_dgv("科目編號", i).Value.ToString : 明細表_dgv("內容", 0).Value = 收款_dgv("內容", i).Value.ToString 明細表_dgv("非點燈收款", 0).Value = CInt(收款_dgv("非點燈收款", i).Value.ToString) 明細表_dgv("性別", 0).Value = 收款_dgv("性別", i).Value.ToString : 明細表_dgv("生肖", 0).Value = 收款_dgv("生肖", i).Value.ToString If 數量 >= 6 Then : If 收款_dgv("CH1", i).Value = True Then : 明細表_dgv(8, 0).Value = True : End If : End If If 數量 >= 7 Then : If 收款_dgv("CH2", i).Value = True Then : 明細表_dgv(9, 0).Value = True : End If : End If If 數量 >= 8 Then : If 收款_dgv("CH3", i).Value = True Then : 明細表_dgv(10, 0).Value = True : End If : End If If 數量 >= 9 Then : If 收款_dgv("CH4", i).Value = True Then : 明細表_dgv(11, 0).Value = True : End If : End If If 數量 >= 10 Then : If 收款_dgv("CH5", i).Value = True Then : 明細表_dgv(12, 0).Value = True : End If : End If If 數量 >= 11 Then : If 收款_dgv("CH6", i).Value = True Then : 明細表_dgv(13, 0).Value = True : End If : End If If 數量 >= 12 Then : If 收款_dgv("CH7", i).Value = True Then : 明細表_dgv(14, 0).Value = True : End If : End If If 數量 >= 13 Then : If 收款_dgv("CH8", i).Value = True Then : 明細表_dgv(15, 0).Value = True : End If : End If If 數量 >= 14 Then : If 收款_dgv("CH9", i).Value = True Then : 明細表_dgv(16, 0).Value = True : End If : End If If 數量 >= 15 Then : If 收款_dgv("CH10", i).Value = True Then : 明細表_dgv(17, 0).Value = True : End If : End If Next End If End Sub Private Sub Set_清單3() Dim ds2 As New DataSet : 明細表1_dgv.DataSource = Nothing : ds2.Clear() 明細表1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 明細表1_dgv.ColumnHeadersHeight = 30 : 明細表1_dgv.AllowUserToAddRows = False : 明細表1_dgv.RowTemplate.Height = 30 SQL_燈價格查詢() da.Fill(ds2) : 明細表1_dgv.DataSource = ds2.Tables(0) : conn.Close() End Sub Private Sub Set_清單4() Dim ds2 As New DataSet : 明細表2_dgv.DataSource = Nothing : ds2.Clear() 明細表2_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 明細表2_dgv.ColumnHeadersHeight = 30 : 明細表2_dgv.AllowUserToAddRows = False : 明細表2_dgv.RowTemplate.Height = 30 SQL_燈科目查詢() da.Fill(ds2) : 明細表2_dgv.DataSource = ds2.Tables(0) : conn.Close() End Sub Private Sub Set_清單5() Dim ds1 As New DataSet : 收款_dgv.DataSource = Nothing : ds1.Clear() 收款_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 收款_dgv.ColumnHeadersHeight = 30 : 收款_dgv.AllowUserToAddRows = False : 收款_dgv.RowTemplate.Height = 30 SQL_點燈_收款查詢() da.Fill(ds1) : 收款_dgv.DataSource = ds1.Tables(0) : conn.Close() End Sub Private Sub Set_清單6() Dim ds1 As New DataSet : 未安燈_dgv.DataSource = Nothing : ds1.Clear() 未安燈_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 未安燈_dgv.ColumnHeadersHeight = 30 : 未安燈_dgv.AllowUserToAddRows = False : 未安燈_dgv.RowTemplate.Height = 30 SQL_點燈_未安查詢() da.Fill(ds1) : 未安燈_dgv.DataSource = ds1.Tables(0) : conn.Close() End Sub Private Sub Set_清單7() Dim ds1 As New DataSet : 剩餘燈_dgv.DataSource = Nothing : ds1.Clear() 剩餘燈_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 剩餘燈_dgv.ColumnHeadersHeight = 30 : 剩餘燈_dgv.AllowUserToAddRows = False : 剩餘燈_dgv.RowTemplate.Height = 30 SQL_點燈_剩餘查詢() da.Fill(ds1) : 剩餘燈_dgv.DataSource = ds1.Tables(0) : conn.Close() 剩餘燈_lb.Text = PA & " 年燈種 剩餘數量 " For I As Integer = 0 To 剩餘燈_dgv.Rows.Count - 1 剩餘燈_lb.Text &= "- " & 剩餘燈_dgv(0, I).Value.ToString & " " & Strings.Format(CInt(剩餘燈_dgv(1, I).Value.ToString), "#,##0") & " " Next End Sub Private Sub Set_清單8() Dim ds1 As New DataSet : 控制表1_dgv.DataSource = Nothing : ds1.Clear() 控制表1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 控制表1_dgv.ColumnHeadersHeight = 30 : 控制表1_dgv.AllowUserToAddRows = False : 控制表1_dgv.RowTemplate.Height = 30 SQL_自動點燈_未點控制表搜尋() da.Fill(ds1) : 控制表1_dgv.DataSource = ds1.Tables(0) : conn.Close() End Sub Private Sub Set_明細() Dim 流水 As Integer If 明細表_dgv.Rows.Count = 0 Then : 流水 = 1 : End If 明細表_dgv.Rows.Insert(0) If 明細表_dgv.Rows.Count > 1 Then : 流水 = CInt(明細表_dgv("項", 1).Value) + 1 : End If For i = 5 To 明細表1_dgv.Rows.Count + 4 : 明細表_dgv(i, 0).Value = False : Next 明細表_dgv("非點燈收款", 0).Value = 0 : 明細表_dgv("金額", 0).Value = 0 : 明細表_dgv("項", 0).Value = 流水 : 明細表_dgv("姓名", 0).Value = "" 明細表_dgv("會計科目", 0).Value = "" : 明細表_dgv("課目編號", 0).Value = "" : 明細表_dgv("內容", 0).Value = "" : 明細表_dgv("生肖", 0).Value = "" 明細表_dgv("性別", 0).Value = "" 明細表_dgv.Rows(0).Cells("查").Value = My.Resources.Search End Sub Private Sub 控制表_dgv_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles 控制表_dgv.CellClick If e.RowIndex = -1 Then : Else 單號_tb.Text = 控制表_dgv(0, e.RowIndex).Value.ToString 群組編號_cb.Text = 控制表_dgv(10, e.RowIndex).Value.ToString PA20 = 單號_tb.Text : SQL_點燈_單號年度查詢() If dr.Read() Then : 年度_cb.Text = dr("年度").ToString Else If 年度_cb.Text = "" Then 年度_cb.Text = CInt(Strings.Left(Strings.Format(Today(), "yyyy/MM/dd"), 4)) - 1911 End If End If : conn.Close() : Set_清單2() End If End Sub Private Sub 點燈確認_bt_Click(sender As Object, e As EventArgs) Handles 點燈確認_bt.Click If 年度_cb.Text <> "" And 明細表_dgv.Rows.Count > 0 Then CB選擇清單(年度_cb, 年度_cb.Text) PA = 單號_tb.Text : SQL_點燈_控制表已點燈修改() : SQL_點燈_明細表刪除() : conn.Close() For i As Integer = 0 To 明細表_dgv.Rows.Count - 1 : PA2 = 明細表_dgv("姓名", i).Value.ToString : PA6 = 年度_cb.Text For ii As Integer = 8 To 7 + 明細表1_dgv.Rows.Count If 明細表_dgv(ii, i).Value = True Then : Set_流水號() : PA3 = 明細表1_dgv("燈種", ii - 8).Value.ToString : PA4 = 明細表1_dgv("價格", ii - 8).Value.ToString If 明細表1_dgv("排序", ii - 8).Value.ToString = "順排" Then : PA21 = "" : Else : PA21 = "DESC" : End If SQL_點燈自動搜尋位置() : If dr.Read() Then : PA5 = dr("編號").ToString() : End If : SQL_點燈明細新增() : conn.Close() End If Next Next : MsgBox("點燈成功!!") : 單號_tb.Text = "" : Set_清單1() : Set_清單2() Else : MsgBox("年度未選擇或明細表無資料") : End If End Sub Private Sub Set_流水號() SQL_點燈_明細表流水號查詢() If dr.Read() Then Dim 流水 As String = dr("流水號").ToString() ' 將流水號轉換為字串 Dim 流水號數字部分 As Integer = Integer.Parse(流水.Substring(1)) Dim 新流水號數字部分 As Integer = 流水號數字部分 + 1 Dim 新流水號數字部分字串 As String = 新流水號數字部分.ToString().PadLeft(8, "0"c) 新流水1 = "D" & 新流水號數字部分字串 Else : 新流水1 = "D00000000" : End If : PA7 = 新流水1 : conn.Close() End Sub End Class