|
โปรเจคชุดนี้ไม่ธรรมดาน่ะครับ จุดประสงค์หลักๆจะเป็นการอ่านโครงสร้างตารางข้อมูลของไฟล์ MS Access มาแสดงผลลงใน ComboBox แล้วก็เลือกตารางใดๆขึ้นมาก่อน จากนั้นก็ให้แสดงผลฟิลด์ข้อมูลลงไปใน ListBox Control ต่อไปก็ให้ทำการเลือกฟิลด์ข้อมูลที่ต้องการเพื่อมาทำการแสดงผล ด้วยการทำ Query แล้วแสดงผลข้อมูลลงไปในตารางกริด นอกเหนือจากนี้คุณจะได้ทำการฝึกฝนการควบคุม ListBox Control ได้อีกทางหนึ่งด้วย โดยการเลื่อนตำแหน่งขึ้นลง หรือเพิ่มลบไอเทมที่มีอยู่ใน ListBox ... ไม่ขออธิบายมากไปดูโค้ดกันเลยดีกว่า ...
มาดูโค้ดฉบับเต็มกันเถอะ ...
- Imports System.Data.OleDb
- Public Class frmViewDataAccess
- Dim Conn As OleDbConnection
- Dim Cmd As OleDbCommand
- Private Sub frmViewDataAccess_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- Application.Exit()
- End Sub
- Private Sub frmViewDataAccess_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
- '// ฟอร์มจะต้องกำหนด KeyPreview = True มาก่อนด้วย
- Select Case e.KeyCode
- Case Keys.F7
- Call btnQuery_Click(sender, e)
- Case Keys.F10
- Me.Close()
- End Select
- End Sub
- Private Sub frmViewDataAccess_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- Me.CenterToScreen()
- Me.ToolStrip1.Cursor = Cursors.Hand
- Me.KeyPreview = True
- End Sub
- Private Sub btnBrowseFile_Click(sender As System.Object, e As System.EventArgs) Handles btnBrowseFile.Click
- ' ประกาศใช้งาน Open File Dialog ในแบบ Run Time
- Dim dlgOpenFile As OpenFileDialog = New OpenFileDialog()
- ' / ตั้งค่าการใช้งาน Open File Dialog
- With dlgOpenFile
- .InitialDirectory = MyPath(Application.StartupPath)
- .Filter = "MS Access Files (*.mdb;*.accdb)|*.mdb;*.accdb"
- .Title = "เลือกไฟล์ MS Access"
- .FilterIndex = 1
- .RestoreDirectory = True
- End With
- Dim strConn As String = ""
- Try
- ' หากเลือกปุ่ม OK หลังจากการ Browse ...
- If dlgOpenFile.ShowDialog() = DialogResult.OK Then
- lsbSource.Items.Clear()
- lsbDest.Items.Clear()
- '//
- txtFileName.Text = dlgOpenFile.FileName
- strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
- dlgOpenFile.FileName & ";"
- Conn = New OleDbConnection(strConn)
- Conn.Open()
- '//
- Dim MyTable As New DataTable
- ' อ่านค่ารายชื่อตาราง (TABLE)
- MyTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
- New Object() {Nothing, Nothing, Nothing, "TABLE"})
- ' แสดงรายชื่อตาราง (Table)
- cmbTable.Items.Clear()
- For i = 0 To MyTable.Rows.Count - 1
- cmbTable.Items.Add(MyTable.Rows(i)!TABLE_NAME.ToString)
- Next i
- End If
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- End Sub
- ' / --------------------------------------------------------------------------------
- ' / Get my project path
- ' / AppPath = C:\My Project\bin\debug
- ' / Replace "\bin\debug" with ""
- ' / Return : C:\My Project\
- Function MyPath(AppPath As String) As String
- '/ MessageBox.Show(AppPath);
- AppPath = AppPath.ToLower()
- '/ Return Value
- MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
- '// If not found folder then put the \ (BackSlash ASCII Code = 92) at the end.
- If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
- End Function
- Private Sub btnMoveRight_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveRight.Click
- '// ยังไม่ได้เลือกไอเทม
- If lsbSource.SelectedIndex < 0 Then
- MessageBox.Show("กรุณาเลือกไอเทมในรายการที่ 1 ก่อน.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
- Else
- '// เพิ่มไอเทมที่เลือกจาก lsbSource ไปให้กับ lsbDest
- lsbDest.Items.Add(lsbSource.SelectedItem)
- '// ลบไอเทมที่เลือกใน lsbSource ออกไป
- lsbSource.Items.Remove(lsbSource.SelectedItem)
- End If
- End Sub
- Private Sub btnMoveLeft_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveLeft.Click
- If lsbDest.SelectedIndex < 0 Then
- MessageBox.Show("กรุณาเลือกไอเทมในรายการที่ 2 ก่อน.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
- Else
- '// เพิ่มไอเทมที่เลือกจาก lsbDest ไปให้กับ lsbSource
- lsbSource.Items.Add(lsbDest.SelectedItem)
- '// ลบไอเทมที่เลือกใน lsbDest ออกไป
- lsbDest.Items.Remove(lsbDest.SelectedItem)
- End If
- End Sub
- Private Sub btnMoveRightAll_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveRightAll.Click
- '// ลูปเอาไอเทมทั้งหมดที่มีอยู่ใน lsbSource ไปให้กับ lsbDest
- For Each item In lsbSource.Items
- lsbDest.Items.Add(item)
- Next
- '// ลบไอเทมที่มีอยู่ทั้งหมดใน lsbSource ออกไป
- lsbSource.Items.Clear()
- End Sub
- Private Sub btnMoveLeftAll_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveLeftAll.Click
- txtSQL.Clear()
- '// ลูปเอาไอเทมทั้งหมดที่มีอยู่ใน lsbDest ไปให้กับ lsbSource
- For Each item In lsbDest.Items
- lsbSource.Items.Add(item)
- Next
- '// ลบไอเทมที่มีอยู่ทั้งหมดใน lsbDest ออกไป
- lsbDest.Items.Clear()
- End Sub
- Private Sub btnClose_Click(sender As System.Object, e As System.EventArgs)
- Me.Close()
- End Sub
- Private Sub btnQuery_Click(sender As System.Object, e As System.EventArgs) Handles btnQuery.Click
- If lsbDest.Items.Count <= 0 Then Exit Sub
- If dgvData.Rows.Count > 0 Then dgvData.DataSource = Nothing
- Try
- Dim FieldName As String = String.Empty
- For Each item In lsbDest.Items
- FieldName = FieldName & item & ","
- Next
- '// ตัดเครื่องหมายคอมม่าตัวท้ายสุดทิ้ง
- If Microsoft.VisualBasic.Right(FieldName, 1) = "," Then FieldName = Mid(FieldName, 1, Len(FieldName) - 1)
- '//
- Dim strSQL As String = "SELECT " & FieldName & " FROM [" & cmbTable.Text & "]"
- txtSQL.Text = strSQL
- '//
- Cmd = New OleDbCommand(strSQL, Conn)
- If Conn.State = ConnectionState.Closed Then Conn.Open()
- Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(Cmd)
- Dim myDataSet As DataSet = New DataSet()
- '// Using DataAdapter object fill data from database into DataSet object
- myDA.Fill(myDataSet, "MyTable")
- '// Binding DataSet to DataGridView
- dgvData.DataSource = myDataSet.Tables("MyTable").DefaultView
- lblCount.Text = "[จำนวน: " & Format(Val(dgvData.Rows.Count - 1), "#,##") & " รายการ]"
- Conn.Close()
- '// Setting DataGridView
- With dgvData
- .RowHeadersVisible = False
- .AllowUserToAddRows = False
- .AllowUserToDeleteRows = False
- .AllowUserToResizeRows = False
- .MultiSelect = False
- .SelectionMode = DataGridViewSelectionMode.FullRowSelect
- .ReadOnly = True
- ' Autosize Column
- .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
- .AutoResizeColumns()
- .Font = New Font("Tahoma", 8)
- '// ตั้งค่า ColumnHeadersHeightSizeMode ก่อนที่จะทำการปรับความสูงของแถวได้
- .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
- .ColumnHeadersHeight = 28
- '// กำหนดให้ EnableHeadersVisualStyles = False เพื่อให้ยอมรับการเปลี่ยนแปลงสีพื้นหลัง
- .EnableHeadersVisualStyles = False
- '// Even-Odd Color
- .AlternatingRowsDefaultCellStyle.BackColor = Color.LightYellow ' .AliceBlue
- ' ตัวอย่างการปรับ Header Style
- With .ColumnHeadersDefaultCellStyle
- .BackColor = Color.Navy
- .ForeColor = Color.Black
- .Font = New Font("Tahoma", 8, FontStyle.Bold)
- End With
- For iCol As Integer = 0 To .Columns.Count - 1
- '// คำนวณหาเลขคู่กับเลขคี่ หากเลขจำนวนเต็มใดๆหารเอาเศษ (Mod) ด้วย 2 แล้วได้คำตอบ 1 คือเลขคี่
- If iCol Mod 2 = 1 Then
- .Columns(iCol).HeaderCell.Style.BackColor = Color.DarkOrange
- '// หารเอาเศษด้วย 2 ได้ 0 คือเลขคู่
- Else
- .Columns(iCol).HeaderCell.Style.BackColor = Color.DeepSkyBlue
- End If
- Next
- End With
- Catch ex As Exception
- MessageBox.Show(ex.Message, "Open Table")
- Exit Sub
- End Try
- End Sub
- Private Sub lsbSource_DoubleClick(sender As Object, e As System.EventArgs) Handles lsbSource.DoubleClick
- '// ยังไม่ได้เลือกไอเทม
- If lsbSource.SelectedIndex < 0 Then
- MessageBox.Show("กรุณาเลือกไอเทมในรายการที่ 1 ก่อน.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
- Else
- '// เพิ่มไอเทมที่เลือกจาก lsbSource ไปให้กับ lsbDest
- lsbDest.Items.Add(lsbSource.SelectedItem)
- '// ลบไอเทมที่เลือกใน lsbSource ออกไป
- lsbSource.Items.Remove(lsbSource.SelectedItem)
- End If
- End Sub
- Private Sub lsbDest_DoubleClick(sender As Object, e As System.EventArgs) Handles lsbDest.DoubleClick
- If lsbDest.SelectedIndex < 0 Then
- MessageBox.Show("กรุณาเลือกไอเทมในรายการที่ 2 ก่อน.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
- Else
- '// เพิ่มไอเทมที่เลือกจาก lsbDest ไปให้กับ lsbSource
- lsbSource.Items.Add(lsbDest.SelectedItem)
- '// ลบไอเทมที่เลือกใน lsbDest ออกไป
- lsbDest.Items.Remove(lsbDest.SelectedItem)
- End If
- End Sub
- Private Sub btnMoveUp_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveUp.Click
- 'Make sure our item is not the first one on the list.
- If lsbDest.SelectedIndex > 0 Then
- Dim iRow = lsbDest.SelectedIndex - 1
- lsbDest.Items.Insert(iRow, lsbDest.SelectedItem)
- lsbDest.Items.RemoveAt(lsbDest.SelectedIndex)
- lsbDest.SelectedIndex = iRow
- End If
- End Sub
- Private Sub btnMoveDown_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveDown.Click
- 'Make sure our item is not the last one on the list.
- If lsbDest.SelectedIndex < lsbDest.Items.Count - 1 Then
- 'Insert places items above the index you supply, since we want
- 'to move it down the list we have to do + 2
- Dim iRow = lsbDest.SelectedIndex + 2
- lsbDest.Items.Insert(iRow, lsbDest.SelectedItem)
- lsbDest.Items.RemoveAt(lsbDest.SelectedIndex)
- lsbDest.SelectedIndex = iRow - 1
- End If
- End Sub
- Private Sub btnClearGrid_Click(sender As System.Object, e As System.EventArgs) Handles btnClearGrid.Click
- dgvData.DataSource = Nothing
- lblCount.Text = "[จำนวน: 0 รายการ]"
- End Sub
- Private Sub itemBtnExit_Click(sender As System.Object, e As System.EventArgs) Handles itemBtnExit.Click
- Me.Close()
- End Sub
- Private Sub ToolStripStatusLabel3_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripStatusLabel3.Click
- Process.Start("http://www.g2gnet.com/webboard")
- End Sub
- Private Sub ToolStripStatusLabel2_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripStatusLabel2.Click
- Process.Start("https://www.facebook.com/g2gnet")
- End Sub
- '// เลือกตารางข้อมูล แล้วนำฟิลด์ข้อมูลแสดงผลลงใน ListBox (lsbSource)
- Private Sub cmbTable_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbTable.SelectedIndexChanged
- lsbSource.Items.Clear()
- lsbDest.Items.Clear()
- txtSQL.Clear()
- ' ค้นคืน Schema เพื่ออ่านหลัก (Column) หรือ ฟิลด์ (Field) จากตารางที่เลือก
- Dim cmd As OleDbCommand = New OleDbCommand(cmbTable.Text, Conn)
- ' CommandType Enumeration มี 3 แบบคือ
- ' StoredProcedure - The name of a stored procedure.
- ' TableDirect - The name of a table.
- ' Text - SQL text command. (ค่า Default)
- cmd.CommandType = CommandType.TableDirect
- '/ https://msdn.microsoft.com/en-us/library/system.data.commandtype(v=vs.110).aspx
- If Conn.State = ConnectionState.Closed Then Conn.Open()
- Dim DT As New DataTable
- DT = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, cmbTable.Text, Nothing})
- For i = 0 To DT.Rows.Count - 1
- lsbSource.Items.Add(DT.Rows(i).Item(3).ToString())
- Next i
- '//
- cmd.Dispose()
- End Sub
- Private Sub txtSQL_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtSQL.KeyDown
- e.SuppressKeyPress = True
- End Sub
- Private Sub itemOpenFile_Click(sender As System.Object, e As System.EventArgs) Handles itemOpenFile.Click
- Call btnBrowseFile_Click(sender, e)
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|