Imports System.Data.Common Public Class 燈位基本資料 Dim DGV選擇 As Integer Private Sub Set_清單1() Dim ds1 As New DataSet : 控制表_dgv.DataSource = Nothing : ds1.Clear() 控制表_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 控制表_dgv.ColumnHeadersHeight = 25 : 控制表_dgv.AllowUserToAddRows = False : 控制表_dgv.RowTemplate.Height = 25 PA = 年度_cb.Text : 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("燈數").DefaultCellStyle.Format = "#,##0.##" : 控制表_dgv.Columns("燈數").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight 控制表_dgv.Columns(1).Visible = False : 控制表_dgv.Columns(3).FillWeight = 160 : 控制表_dgv.Columns(5).Visible = False Dim 加總 As Integer = 0 : For I As Integer = 0 To 控制表_dgv.Rows.Count - 1 : 加總 += 控制表_dgv("燈數", I).Value : Next : 合計數_tb.Text = Strings.Format(加總, "#,##0") End Sub Private Sub Set_清單2() Dim ds1 As New DataSet : 明細表1_dgv.DataSource = Nothing : ds1.Clear() 明細表1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 明細表1_dgv.ColumnHeadersHeight = 25 : 明細表1_dgv.AllowUserToAddRows = False : 明細表1_dgv.RowTemplate.Height = 25 PA10 = 年度_cb.Text : SQL_燈號明細() da.Fill(ds1) : 明細表1_dgv.DataSource = ds1.Tables(0) : conn.Close() For I As Integer = 0 To 明細表1_dgv.Rows.Count - 1 : If IsDBNull(明細表1_dgv("姓名", I).Value) Then : 明細表1_dgv("姓名", I).Value = "" : End If : Next End Sub Private Sub Set_清單3() Dim ds1 As New DataSet : 明細表2_dgv.DataSource = Nothing : ds1.Clear() 明細表2_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 明細表2_dgv.ColumnHeadersHeight = 25 : 明細表2_dgv.AllowUserToAddRows = False : 明細表2_dgv.RowTemplate.Height = 25 SQL_燈號明細_列數() da.Fill(ds1) : 明細表2_dgv.DataSource = ds1.Tables(0) : conn.Close() End Sub Private Sub 年份_下拉表單資料載入() SQL_燈年份() : 年度_cb.Items.Clear() : While (dr.Read()) : 年度_cb.Items.Add(dr("年度")) : End While : conn.Close() End Sub Private Sub 燈位基本資料_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.MdiParent = ICS_ASMS_ERP_SYS : Me.WindowState = 2 : Me.AutoScroll = True 燈位_dgv.BringToFront() End Sub Private Sub 燈位基本資料_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown 年份_下拉表單資料載入() : 年度_cb.Text = CInt(Year(Today())) - 1911 : Set_清單1() End Sub Private Sub 年度_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 年度_cb.SelectedIndexChanged PA = 年度_cb.Text : Set_清單1() 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 行 = 燈位_dgv(0, e.RowIndex).Value.ToString() : 列 = 燈位_dgv.SelectedCells(0).ColumnIndex Dim 行值 As Integer = Convert.ToInt32(行) : Dim 列值 As Integer = Convert.ToInt32(列) Dim 資料行 As DataGridViewRow = Nothing For Each 行資料 As DataGridViewRow In 明細表1_dgv.Rows If 行資料.Cells("列位").Value.ToString() = 列 AndAlso 行資料.Cells("層位").Value.ToString() = 行 Then 資料行 = 行資料 : Exit For End If Next If 資料行 IsNot Nothing Then PA20 = 資料行.Cells("流水號").Value.ToString() : PA22 = 年度_cb.Text : PA23 = 殿_tb.Text : PA24 = 區編_tb.Text PA21 = 資料行.Cells("編號").Value.ToString() : PA25 = 牆位_bt.Text : PA26 = 燈種_bt.Text : PA27 = 資料行.Cells("姓名").Value.ToString() PA28 = 金額_tb.Text End If : 信眾燈位編輯.BringToFront() : 信眾燈位編輯.查詢物_bt.PerformClick() End If End Sub Private Sub 燈位_dgv_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles 燈位_dgv.MouseUp 'If 燈位_dgv.SelectedCells.Count = 1 Then : MsgBox(燈位_dgv.SelectedCells(0).ColumnIndex & " " & 燈位_dgv.SelectedCells(0).RowIndex) : End If If 燈位_dgv.SelectedCells.Count = 1 Then : 列 = 燈位_dgv.SelectedCells(0).ColumnIndex : End If End Sub Private Sub 控制表_dgv_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 控制表_dgv.RowPostPaint Dim linePen As New Pen(Color.Red, 2) If e.RowIndex = 控制表_dgv.Rows.Count - 1 Then : Exit Sub : Else If 控制表_dgv(0, e.RowIndex).Value.ToString <> 控制表_dgv(0, e.RowIndex + 1).Value.ToString Then Dim startX As Integer = IIf(控制表_dgv.RowHeadersVisible, 控制表_dgv.RowHeadersWidth, 0) : Dim startY As Integer = e.RowBounds.Top + e.RowBounds.Height - 1 Dim endX As Integer = startX + 控制表_dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - 控制表_dgv.HorizontalScrollingOffset e.Graphics.DrawLine(linePen, startX, startY, endX, startY) : Exit Sub End If End If 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 : DGV選擇 = e.RowIndex : 執行1_bt.PerformClick() End If End Sub Private Sub 執行1_bt_Click(sender As Object, e As EventArgs) Handles 執行1_bt.Click PA = 控制表_dgv(1, DGV選擇).Value.ToString : PA1 = 控制表_dgv(2, DGV選擇).Value.ToString : Set_清單2() : Set_清單3() 位置_tb.Text = 控制表_dgv(0, DGV選擇).Value.ToString & " (殿) - " & 控制表_dgv(2, DGV選擇).Value.ToString & " 區 - " & 控制表_dgv(3, DGV選擇).Value.ToString 殿_tb.Text = 控制表_dgv("廳位", DGV選擇).Value.ToString : 區編_tb.Text = 控制表_dgv("區編", DGV選擇).Value.ToString 牆位_bt.Text = 控制表_dgv("牆柱位", DGV選擇).Value.ToString : 燈種_bt.Text = 控制表_dgv("燈種", DGV選擇).Value.ToString 金額_tb.Text = 控制表_dgv("價格", DGV選擇).Value.ToString 燈位_dgv.Columns.Clear() 燈位_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 燈位_dgv.ColumnHeadersHeight = 30 : 燈位_dgv.AllowUserToAddRows = False : 燈位_dgv.RowTemplate.Height = 25 Dim columnName As String = "層" Dim newColumn As New DataGridViewTextBoxColumn With { .HeaderText = columnName, .Name = columnName, .Width = 30 ' 設定欄位寬度為 30 } 燈位_dgv.Columns.Add(newColumn) For i As Integer = 1 To CInt(明細表2_dgv(0, 0).Value.ToString) Dim columnName1 As String = $"列{i:D3}" ' 產生列名稱,例如 "列001", "列002", ... Dim newColumn1 As New DataGridViewTextBoxColumn With { .HeaderText = columnName1, .Name = columnName1, .Width = 50 ' 設定欄位寬度為 30 } 燈位_dgv.Columns.Add(newColumn1) Next 燈位_dgv.Columns(0).Frozen = True Dim 層數1, 層數2, 層數3, 列數1 As Integer 層數1 = 明細表1_dgv(1, 0).Value.ToString : 層數2 = 0 : 層數3 = 層數1 For i As Integer = 0 To 明細表1_dgv.Rows.Count - 1 '-------建立層數------------------------------------ If 層數1 <> 層數2 Then 燈位_dgv.Rows.Insert(0) 燈位_dgv("層", 0).Value = 明細表1_dgv(1, i).Value.ToString End If If 層數3 <> 層數2 And 層數2 <> 0 Then 層數1 = 層數2 : 層數3 = 層數2 End If 列數1 = 明細表1_dgv(0, i).Value.ToString '-------填入資料------------------------------------ If CInt(明細表1_dgv(0, i).Value.ToString) = 列數1 Then 燈位_dgv(列數1, 0).Value = 明細表1_dgv("姓名", i).Value.ToString Else : 燈位_dgv(列數1, 0).Value = "" End If If i + 1 <= 明細表1_dgv.Rows.Count - 1 Then 層數2 = 明細表1_dgv(1, i + 1).Value.ToString End If Next End Sub Private Sub 燈種編輯_bt_Click(sender As Object, e As EventArgs) Handles 燈種編輯_bt.Click 燈種編輯.ShowDialog() : 年份_下拉表單資料載入() : 年度_cb.Text = CInt(Year(Today())) - 1911 : Set_清單1() End Sub Private Sub 燈位編輯_bt_Click(sender As Object, e As EventArgs) Handles 燈位編輯_bt.Click 年度_cb.Enabled = False : 信眾燈位編輯.Show() End Sub Private Sub 排序_bt_Click(sender As Object, e As EventArgs) Handles 排序_bt.Click ' 假設明細表1_dgv 中資料已經是按照由下到上的順序排序 ' 若要將燈位_dgv 由下到上改成由上到下,只需將資料順序反轉即可 ' 建立一個新的 DataTable 來存儲反向的資料 Dim reversedDataTable As New DataTable() ' 將燈位_dgv 目前的欄位結構複製到新的 DataTable 中 For Each column As DataGridViewColumn In 燈位_dgv.Columns reversedDataTable.Columns.Add(column.Name) Next ' 反向遍歷燈位_dgv 的資料列,將每一列的資料反向插入到新的 DataTable 中 For rowIndex As Integer = 燈位_dgv.Rows.Count - 1 To 0 Step -1 Dim rowData(燈位_dgv.Columns.Count - 1) As Object For columnIndex As Integer = 0 To 燈位_dgv.Columns.Count - 1 rowData(columnIndex) = 燈位_dgv.Rows(rowIndex).Cells(columnIndex).Value Next reversedDataTable.Rows.Add(rowData) Next ' 清空燈位_dgv 中的資料 燈位_dgv.Rows.Clear() ' 將反向的資料設定為燈位_dgv 的資料來源 For Each row As DataRow In reversedDataTable.Rows 燈位_dgv.Rows.Add(row.ItemArray) Next End Sub Private Sub 查詢_bt_Click(sender As Object, e As EventArgs) Handles 查詢_bt.Click 通知訊息 = "請輸入信眾的 [姓名]、[電話]、[住址] 的關鍵字來進行查詢!!" : 查詢視窗.ShowDialog() : PA57 = 訊息回應 連動模組.SetCallingPage("燈位基本資料") : 連動模組.ShowDialog() : 連動模組.BringToFront() : 查看燈位.ShowDialog() : 查看燈位.BringToFront() End Sub Public Sub ReceiveDataFromPageC(ByVal data As String, ByVal data1 As String) ' 在這裡處理從頁面B接收到的數據,將其設定到頁面A的TextBox中 年度_cb.Text = data : Set_清單1() Dim result As String() = data1.Split("-") For i As Integer = 0 To 控制表_dgv.Rows.Count - 1 Dim str As String = 控制表_dgv.Rows(i).Cells("廳位").Value Dim str1 As String = 控制表_dgv.Rows(i).Cells("區編").Value Dim str2 As String = 控制表_dgv.Rows(i).Cells("牆柱位").Value If result(0) = str And result(1) = str1 And result(2) = str2 Then DGV選擇 = i : 執行1_bt.PerformClick() End If Next End Sub End Class