|
สวัสดีครับพี่น้องหมู่เฮาชุมชนคนรักภาษาเบสิค วันนี้ก็มาแจกโค้ดแบบพื้นๆบ้านๆ แต่เป็นหลักการขั้นพื้นฐานที่จะนำทางให้พี่น้องได้ก้าวไปข้างหน้า ในการฝึกฝนเรียนรู้พัฒนาโปรแกรมด้วย Visual Basic .NET ด้วย การนำข้อมูลจาก DataBase มาแสดงผลบน DataGrid ในลักษณะที่เรียกกันว่า Bound Data หรือ การผูกข้อมูลเข้ากับคอนโทรล (DataGrid) แต่จะเป็นแบบ @Run Time Programming คือการใช้โค้ดเพื่อสั่งรันโปรแกรม มันจึงจะเห็นผล การเขียนโค้ดในลักษณะนี้ จะแตกต่างไปจากการจับลากมาวาง หรือที่เรียกว่า @Design Time เพราะเราจะสามารถควบคุมการทำงานของโปรแกรมให้เป็นไปในทิศทางที่เราต้องการได้ข่ะรับ ...
มารู้จักกับคำว่า Bound และ UnBound Control
- Bound Control ... คือการผูก (Bound) ตารางข้อมูลเข้ากับพวก Component หรือ Control ต่างๆ กรณีที่นำมาใช้แสดงผลลงในตารางกริด มันจะอ่านค่าฟิลด์ต่างๆ เพื่อแสดงผลในแต่ละหลัก เรียงตามลำดับจาก Query ที่เราเขียนไว้ และ ต้องแสดงทุกๆฟิลด์ออกมาทั้งหมด มักจะนำไปแสดงผลข้อมูล การป้อนข้อมูล และอัพเดตค่าจากฟิลด์ต่างๆในฐานข้อมูล
- UnBound Control ก็จะไม่มีการผูก (Unbound) ตารางข้อมูลใดๆเข้ากับ Component หรือ Control การนำไปใช้ในตารางกริด ไม่จำเป็นต้องแสดงผลออกมาทุกฟิลด์ โดยจะเอาตัวไหนมาแสดงผลในหลักใดๆของตารางกริดก่อนหลังก็ได้ มีความยืดหยุ่น มักใช้กับการเข้าไปแก้ไขข้อมูลตารางกริดในแต่ละเซลล์ เช่น การคำนวณ หรือการป้อนข้อมูลที่มีลักษณะแบบไม่ตายตัว
- Dim DA As New OleDb.OleDbDataAdapter(Sql, Conn)
- Dim DS As New DataSet
- DA.Fill(DS)
- dgvData.DataSource = DS.Tables(0)
คัดลอกไปที่คลิปบอร์ด โค้ดในส่วนนี้นี่แหละคือ การผูกข้อมูล หรือ Bound Data
มาดูโค้ดกันเถอะ ...
- ' / --------------------------------------------------------------------------------
- ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
- ' / eMail : thongkorn@hotmail.com
- ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
- ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
- ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
- ' / Purpose: Simple procedure to binding data into datagridview. (Call Bound Data)
- ' / Microsoft Visual Basic .NET (2010) + MS Access
- ' /
- ' / This is open source code under @Copyleft by Thongkorn Tubtimkrob.
- ' / You can modify and/or distribute without to inform the developer.
- ' / --------------------------------------------------------------------------------
- Imports System.Data.OleDb
- Imports Microsoft.VisualBasic
- Public Class frmDataBinding
- Dim Conn As OleDbConnection
- Dim strPath As String = MyPath(Application.StartupPath)
- ' / --------------------------------------------------------------------------------
- '// Initialize DataGridView @Run Time
- Private Sub InitDataGrid()
- With dgvData
- .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.AliceBlue
- ' Adjust Header Styles
- With .ColumnHeadersDefaultCellStyle
- .BackColor = Color.Navy
- .ForeColor = Color.Black
- .Font = New Font("Tahoma", 9, FontStyle.Bold)
- End With
- End With
- End Sub
- ' / --------------------------------------------------------------------------------
- Private Sub btnBrowse_Click(sender As System.Object, e As System.EventArgs) Handles btnBrowse.Click
- Dim OpenFile As New OpenFileDialog()
- '// Specifies the initial path.
- OpenFile.InitialDirectory = strPath
- OpenFile.FileName = ""
- '// Set to filter only files MS Access (*.accdb;*.mdb)
- OpenFile.Filter = "Microsoft Access Files |*.accdb;*.mdb"
- '// Reference
- '// http://msdn.microsoft.com/en-us/library/c7ykbedk.aspx
- '// http://msdn.microsoft.com/en-us/library/system.windows.forms.dialogresult.aspx
- Dim Res As System.Windows.Forms.DialogResult = OpenFile.ShowDialog()
- ' Press Cancel to leave.
- If Res = System.Windows.Forms.DialogResult.Cancel Then Return
- '// Bring path and filename to display in TextBox.
- txtLocateDB.Text = OpenFile.FileName
- '//
- If txtLocateDB.Text.Length = 0 Or Trim(txtLocateDB.Text) = "" Then Return
- '// Connect MS Access with your select file.
- If ConnectDataBase(txtLocateDB.Text) Then
- lblStatus.Text = "Connection ..."
- lblStatus.ForeColor = Color.Green
- Else
- lblStatus.Text = "Disconnection ..."
- lblStatus.ForeColor = Color.Red
- End If
- End Sub
- ' / --------------------------------------------------------------------------------
- '// Return True if can connect, otherwise is False.
- Public Function ConnectDataBase(ByVal DBFile As String) As Boolean
- Dim strConn As String = _
- "Provider = Microsoft.ACE.OLEDB.12.0; "
- strConn += "Data Source = " & DBFile
- Try
- Conn = New OleDb.OleDbConnection(strConn)
- '// Create Connection
- Conn.ConnectionString = strConn
- Conn.Open()
- '// Return
- Return True
- Catch ex As Exception
- 'MessageBox.Show(ex.Message)
- Return False
- End Try
- End Function
- ' / --------------------------------------------------------------------------------
- ' / Get my project path
- ' / AppPath = C:\My Project\bin\debug
- ' / Replace "\bin\debug" with ""
- ' / Return : C:\My Project\
- Function MyPath(ByVal 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) at the end.
- If Microsoft.VisualBasic.Right(MyPath, 1) <> "" Then MyPath = MyPath & ""
- End Function
- Private Sub txtLocateDB_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtLocateDB.KeyPress
- '// Can't press any key into Textbox.
- e.Handled = True
- End Sub
- Private Sub frmDataBinding_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- Application.Exit()
- End Sub
- ' / --------------------------------------------------------------------------------
- Private Sub frmDataBinding_Load(sender As Object, e As System.EventArgs) Handles Me.Load
- '// Initialize DataGridView
- Call InitDataGrid()
- '// Sample SQL Statement
- txtSQL.Text = "SELECT ContactPK, Fullname, Nickname, Mobile, Phone, eMail, LineID FROM tblContact ORDER BY ContactPK "
- 'txtSQL.Text = "SELECT ContactPK, Fullname, NickName, Mobile, eMail FROM tblContact WHERE Fullname LIKE '%T%' ORDER BY ContactPK"
- lblStatus.Text = "Disconnection ..."
- lblStatus.ForeColor = Color.Red
- End Sub
- ' / --------------------------------------------------------------------------------
- '// BOUND DATA into DataGridView.
- Private Sub BindDataGrid(ByVal Sql As String)
- Try
- If Conn.State = ConnectionState.Closed Then Conn.Open()
- Dim DA As New OleDb.OleDbDataAdapter(Sql, Conn)
- Dim DS As New DataSet
- DA.Fill(DS)
- dgvData.DataSource = DS.Tables(0)
- '//
- DA.Dispose()
- DS.Dispose()
- Conn.Close()
- '// Addition
- With dgvData
- '// You can change the columns header @ here
- .Columns(1).HeaderText = "Column Text"
- '// If you want to turn off the display some columns.
- '.Columns("LineID").Visible = False
- '// Or count column by index
- .Columns(6).Visible = False
- End With
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- End Sub
- ' / --------------------------------------------------------------------------------
- Private Sub btnExecute_Click(sender As System.Object, e As System.EventArgs) Handles btnExecute.Click
- If txtSQL.Text.Length = 0 Or Trim(txtSQL.Text) = "" Then Return
- Call BindDataGrid(txtSQL.Text)
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|