Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.SqlClient
Imports System.Globalization
Imports System.Drawing.Printing
Public Class frmMember
Inherits System.Windows.Forms.Form
Dim Conn As SqlConnection = New SqlConnection
Dim da As SqlDataAdapter
Dim ds As DataSet = New DataSet
Dim dt As DataTable
Dim Tody As Date
Dim CurrentRecord As Integer = 0
Dim Recordcount As Integer = 0
Dim UseFont As New Font("MS Sans Serif", 10)
Dim prDoc As PrintDocument = New PrintDocument
Private prDlg As PrintDialog = New PrintDialog
Dim ActionFlag As String = ""
Dim LastRevenueID As String = ""
Dim Dtflnfo As DateTimeFormatInfo
Dim IsFind As Boolean = False
Private Sub frmMember_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.WindowState = FormWindowState.Maximized
Cursor.Current = Cursors.WaitCursor
Dim strConn As String
strConn = "Data Source=.\SQLEXPRESS;Initial Catalog=Business Rule;Integrated Security=True"
'strConn = "Data Source=.\PARKCG;Initial Catalog=Business Rule;Integrated Security=True"
'strConn = "Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Program Files\" & _
'"Microsoft SQL Server\MSSQL10.SQL SERVER\MSSQL\DATA\Business Rule.mdf';" & _
'"Integrated Security=True;Connect Timeout=30;User Instance=True"
With Conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
Dim sqlMemberType As String = " "
sqlMemberType = "SELECT MemberTypeID,MemberTypeName"
sqlMemberType &= "FROM MemberType"
sqlMemberType &= "ORDER BY MemberTypeID"
da = New SqlDataAdapter(sqlMemberType, Conn)
da.Fill(ds, "MemberType")
If ds.Tables("MemberType").Rows.Count <> 0 Then
With cboMemberType
.DataSource = ds.Tables("MemberType")
.DisplayMember = "MemberTypeName"
.ValueMember = "MemberTypeID"
End With
'ShowMemberDetail()
'FormatDataGridWithData()
End If
Dim sqlBranch As String = ""
sqlBranch = "SELECT*FROM Branch ORDER BY BranchID"
da.SelectCommand.CommandText = sqlBranch
da.Fill(ds, "Branch")
If ds.Tables("Branch").Rows.Count <> 0 Then
With cboSearchBranch
.DataSource = ds.Tables("Branch")
.DisplayMember = "BranchName"
.ValueMember = "BranchID"
End With
End If
With cboSearch
.Items.Add("รหัสสมาชิก")
.Items.Add("=ชื่อ-สกุล")
.SelectedIndex = 0
End With
'LockAllCtrl()
Today = Date.Now
'dtpAdmitDate.Value = Today
'
'Dtflnfo =DateTime format Info.Invaris
End Sub
End Class
Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.SqlClient
Imports System.Globalization
Imports System.Drawing.Printing
Public Class Land
Inherits System.Windows.Forms.Form
Dim Conn As SqlConnection = New SqlConnection
Dim da As SqlDataAdapter
Dim ds As DataSet = New DataSet
Dim dt As DataTable
Dim Tody As Date
Dim CurrentRecord As Integer = 0
Dim Recordcount As Integer = 0
Dim UseFont As New Font("MS Sans Serif", 10)
Dim prDoc As PrintDocument = New PrintDocument
Private prDlg As PrintDialog = New PrintDialog
Dim ActionFlag As String = ""
Dim LastRevenueID As String = ""
Dim Dtflnfo As DateTimeFormatInfo
Dim IsFind As Boolean = False
Private Sub Land_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strConn As String
strConn = "Data Source=.\SQLEXPRESS;Initial Catalog=SSPEGIS;Integrated Security=True"
'Dim dbConn As OleDbConnection = New OleDbConnection( _
'"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\db2.mdb")
With Conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
Dim sqlland As String = ""
sqlland = "SELECT LANDID FROM land ORDER BY LANDID"
Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.SqlClient
Imports System.Globalization
Imports System.Drawing.Printing
Public Class Land
Inherits System.Windows.Forms.Form
Dim Conn As SqlConnection = New SqlConnection
Dim da As SqlDataAdapter
Dim product As OleDb.OleDbCommand
Dim add_state As Boolean = False
Dim ds As DataSet = New DataSet
Dim dt As DataTable
Dim Tody As Date
Dim CurrentRecord As Integer = 0
Dim Recordcount As Integer = 0
Dim UseFont As New Font("MS Sans Serif", 10)
Dim prDoc As PrintDocument = New PrintDocument
Private prDlg As PrintDialog = New PrintDialog
Dim strConnString, strSQL As String
Dim objCmd As New SqlCommand
Dim objConn As New SqlConnection
Dim dspro As New DataSet
Dim dtSet As DataSet = New DataSet 'ประกาศตัวแปรแทนออบเจ็คหรือ Instance จากคลาส DataSet
Dim dtTable As DataTable 'ประกาศตัวแปรแทนออบเจ็คหรือ Instance จากคลาส DataTable
Dim objCurrencyMgr As CurrencyManager 'ประกาศตัวแปรแทนออบเจ็คหรือ Instance จากคลาส CurrencyManager
Dim currRecPos As Integer 'ประกาศตัวแปรเก็บตำแหน่งเรคอร์ดปัจจุบัน
'ประกาศตัวแปรแสดงโหมดการทำงาน ถ้าอยู่ในโหมดเพิ่มเรคอร์ดจะมีค่าเป็น True ถ้าอยู่ในโหมดแก้ไขจะมีค่าเป็น False
Dim addNewMode As Boolean
Dim fdName As String 'ประกาศตัวแปรเก็บชื่อฟีลด์ในเทเบิล Contacts
Dim sHelpFile As String
Dim ActionFlag As String = ""
Dim LastRevenueID As String = ""
Dim Dtflnfo As DateTimeFormatInfo
Dim IsFind As Boolean = False
Private Sub Land_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strConn As String
strConn = "Data Source=.\SQLEXPRESS;Initial Catalog=SSPEGIS;Integrated Security=True"
With Conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
Dim sqlland As String = ""
sqlland = "SELECT * FROM land ORDER BY LANDID"
da = New SqlDataAdapter(sqlland, Conn)
da.Fill(ds, "land")
If ds.Tables("land").Rows.Count <> 0 Then
With Conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
product = New OleDb.OleDbCommand
With product
.CommandType = CommandType.Text
If add_state = True Then
.CommandText = sqladd
Else
.CommandText = sqlupdate
End If
.Connection = Conn
.ExecuteNonQuery()
End With
Catch ErrorToEdit As Exception
MessageBox.Show(ErrorToEdit.Message & sqladd, "ข้อผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End Try
add_state = False
MessageBox.Show("บันทึกข้อมูลเสร็จแล้ว ", "แจ้งให้ทราบ", MessageBoxButtons.OK, MessageBoxIcon.Information)
Call lock_object()
Call Show()
End Sub
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
addNewMode = True 'แสดงโหมดการทำงานแบบเพิ่มเรคอร์ดใหม่
currRecPos = objCurrencyMgr.Position 'เก็บตำแหน่งเรคอร์ดปัจจุบันใน datatable ไว้ที่ currRecPos
objCurrencyMgr.AddNew() 'เพิ่มเรคอร์ดใหม่ว่างๆ 1 เรคอร์ดใน datatable
Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click
objCurrencyMgr.Position = 1
End Sub
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
objCurrencyMgr.Position -= 1
End Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
objCurrencyMgr.Position += 1
End Sub
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click
objCurrencyMgr.Position = objCurrencyMgr.Count - 1
End Sub
Private Sub btndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndelete.Click
If dtTable.Rows.Count <= 0 Then
Exit Sub 'ถ้าเป็น datatable ว่าง ให้ออกจาก Procedure นี้
'ถ้าไม่ใช่ datatable ว่าง และผู้ใช้ยืนยันการลบ
ElseIf MessageBox.Show("ต้องการลบเรคอร์ดนี้ใช่หรือไม่?", "ยืนยันการลบ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = vbYes Then
objCurrencyMgr.RemoveAt(objCurrencyMgr.Position) 'ให้ลบเรคอร์ดปัจจุบันออกจาก datatable
dtAdapter.Update(dtTable) 'และลบเรคอร์ดนี้ออกจากฐานข้อมูลด้วย
currRecPos = objCurrencyMgr.Position 'เก็บเรคอร์ดปัจจุบันบนฟอร์มไว้ที่ currRecPos
End If
If dtTable.Rows.Count = 0 Then 'ถ้าลบเรคอร์ดใน datatable จนหมด
DisabledReadWrite() 'ให้เท็กซ์บ็อกซ์ทั้งหมดแสดงข้อมูลแบบอ่านได้อย่างเดียว
End If
End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
If dtTable.Rows.Count <= 0 Then
Exit Sub 'ถ้าเป็น datatable ว่าง ให้ออกจาก Procedure นี้
Else 'ถ้าไม่ใช่ datatable ว่าง
addNewMode = False 'แสดงโหมดการทำงานแบบแก้ไขเรคอร์ด
EnabledReadWrite() 'ให้เท็กซ์บ็อกซ์ทั้งหมดแสดงข้อมูลแบบอ่านเขียนได้
currRecPos = objCurrencyMgr.Position 'เก็บเรคอร์ดปัจจุบันบนฟอร์มไว้ที่ currRecPos
txtLANDID.Focus() 'เลื่อนเคอร์เซอร์รับข้อมูลบนจอภาพไปที่ช่องชื่อ
End If
End Sub
End Class
Dim Conn As SqlConnection 'ยังไม่ต้อง New
Dim da As SqlDataAdapter
Dim product As OleDb.OleDbCommand 'บรรทัดนี้ไว้ทำอะไร ใช้ da พอแล้วมั้ง
Dim add_state As Boolean = False
Dim ds As DataSet = New DataSet 'ไม่ต้องใช้ DataSet ใช้ Datatable ไปเลย
Dim dt As DataTable
Private bin As New BindingSource 'ย้ายมาจากข้างล่าง
Dim Tody As Date 'Today หรือเปล่า
Dim CurrentRecord As Integer = 0
Dim Recordcount As Integer = 0
Dim UseFont As New Font("MS Sans Serif", 10)
Private WithEvents prDoc As New Printing.PrintDocument 'ต้องมี WithEvents ด้วย แล้วใช้คำสั่ง Graphics เป็นหรือยัง
Private prDlg As PrintDialog = New PrintDialog 'ไม่ต้องรีบประกาศ จะใช้ค่อนประกาศ
Dim strConnString, strSQL As String 'strConnString ใช้ครั้งเดียว ประกาศใน Sub
Dim objCmd As New SqlCommand 'ยังไม่ต้อง New
Dim objConn As New SqlConnection 'มีทำไมหลายอัน
Dim dspro As New DataSet 'อันนี้ก็ด้วย
'ชุดนี้ไว้ทำอะไร ซ้ำทั้งนั้น
Dim dtSet As DataSet = New DataSet 'ประกาศตัวแปรแทนออบเจ็คหรือ Instance จากคลาส DataSet
Dim dtTable As DataTable 'ประกาศตัวแปรแทนออบเจ็คหรือ Instance จากคลาส DataTable
Dim objCurrencyMgr As CurrencyManager 'ประกาศตัวแปรแทนออบเจ็คหรือ Instance จากคลาส CurrencyManager
Dim currRecPos As Integer 'ประกาศตัวแปรเก็บตำแหน่งเรคอร์ดปัจจุบัน
'ประกาศตัวแปรแสดงโหมดการทำงาน ถ้าอยู่ในโหมดเพิ่มเรคอร์ดจะมีค่าเป็น True ถ้าอยู่ในโหมดแก้ไขจะมีค่าเป็น False
Dim addNewMode As Boolean
Dim fdName As String 'ประกาศตัวแปรเก็บชื่อฟีลด์ในเทเบิล Contacts
Dim sHelpFile As String
Dim ActionFlag As String = ""
Dim LastRevenueID As String = ""
Dim Dtflnfo As DateTimeFormatInfo
Dim IsFind As Boolean = False
Private Sub Land_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strConn As String = "Data Source=.\SQLEXPRESS;Initial Catalog=SSPEGIS;Integrated Security=True"
Conn = New SqlConnection(strConn)
'DataAdapter ไม่ต้อง Open Conn
Dim sqlland As String
sqlland = "SELECT * FROM land ORDER BY LANDID"
da = New SqlDataAdapter(sqlland, Conn)
da.Fill(dt)
'ไม่ต้องเช็คหรอก ไม่มีอะไรเลยก็ Bind ได้ If ds.Tables("land").Rows.Count <> 0 Then
'เอาไปไว้ข้างนอก Dim bin As New BindingSource(ds, "land")
'ตรงนี้สร้าง Updateข้อมูล มีข้อแม้ว่า ตาราง land ต้องมี คีย์ฟิลล์
Dim cmb As SqlCommandBuilder
cmb = New SqlCommandBuilder(da)
'เพิ่มเติมบรรทัดนี้
bin.Datasource = dt
'นำคอนโทรลเท็กซ์บ็อกซ์บนฟอร์มมาผูกกับข้อมูลในแต่ละฟีลด์ของ datatable
txtLANDID.DataBindings.Add("Text", bin, "LANDID")
txtPARCEL_CODE.DataBindings.Add("Text", bin, "PARCEL_CODE")
txtTAMBON_TH.DataBindings.Add("Text", bin, "TAMBON_TH")
txtDISTRICT_TH.DataBindings.Add("Text", bin, "DISTRICT_TH")
txtPROVINCE_TH.DataBindings.Add("Text", bin, "PROVINCE_TH")
txtUTM_CODE.DataBindings.Add("Text", bin, "UTM_CODE")
txtUTM_NO.DataBindings.Add("Text", bin, "UTM_NO")
txtUTM_PAGE.DataBindings.Add("Text", bin, "UTM_PAGE")
'txtUSED_DESC.DataBindings.Add("Text", bin, "USED_DESC")
'txtLDOC_TYPE.DataBindings.Add("Text", bin, "LDOC_TYPE")
'txtL_UTILIZATION.DataBindings.Add("Text", bine, "L_UTILIZATION")
txtSURVEY_NO.DataBindings.Add("Text", bin, "SURVEY_NO")
'txtLDOC_NO.DataBindings.Add("Text", bin, "USED_DESC")
txtLAND_NO.DataBindings.Add("Text", bin, "LDOC_NO")
txtDOL_RAI.DataBindings.Add("Text", bin, "DOL_RAI")
txtDOL_NGAN.DataBindings.Add("Text", bin, "DOL_NGAN")
txtDOL_WA.DataBindings.Add("Text", bin, "DOL_WA")
txtTAXED_RAI.DataBindings.Add("Text", bin, "TAXED_RAI")
txtTAXED_NGAN.DataBindings.Add("Text", bin, "TAXED_NGAN")
txtTAXED_WA.DataBindings.Add("Text", bin, "TAXED_WA")
End Sub
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
'เอาออกไป
'Dim strConn As String
'Dim sqlupdate As String
'Dim sqladd As String
'sqlupdate = "update land "
'sqlupdate &= " set PARCEL_CODE = '" & txtPARCEL_CODE.Text & "',"
'sqlupdate &= " TAMBON_TH= '" & txtTAMBON_TH.Text & "',"
'sqlupdate &= " DISTRICT_TH= " & Val(txtDISTRICT_TH.Text) & ","
'sqlupdate &= " PROVINCE_TH= " & Val(txtPROVINCE_TH.Text) & ""
'sqlupdate &= " UTM_CODE = '" & txtUTM_CODE.Text & "'"
'sqlupdate &= " where LANDID = '" & txtLANDID.Text & "'"
'sqladd = "insert into land(LANDID,PARCEL_CODE, TAMBON_TH , DISTRICT_TH,PROVINCE_TH)"
'sqladd &= " values ('" & txtLANDID.Text & "',"
'sqladd &= " '" & txtPARCEL_CODE.Text & "',"
'sqladd &= "'" & txtTAMBON_TH.Text & "',"
'sqladd &= "" & Val(txtDISTRICT_TH.Text) & ","
'sqladd &= "" & Val(txtPROVINCE_TH.Text) & ")"
'With Conn
'If .State = ConnectionState.Open Then .Close()
'.ConnectionString = strConn
'.Open()
'End With
Dim dtChange As DataTable = dt.GetChanges
'ถ้าจะตรวจสอบข้อมูล ให้เอาตารางนี้ไปตรวจ
Try
bin.EndEdit()
da.Update(dtChange)
dt.AcceptChanges()
Catch ex As SqlException
MessageBox.Show(ex.Message)
Finally
Conn.Close()
End Try
'เอาออกไป
'product = New OleDb.OleDbCommand
'With product
'.CommandType = CommandType.Text
' If add_state = True Then
'.CommandText = sqladd
' Else
'.CommandText = sqlupdate
'End If
' .Connection = Conn
' .ExecuteNonQuery()
' End With
' Catch ErrorToEdit As Exception
'MessageBox.Show(ErrorToEdit.Message & sqladd, "ข้อผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Error)
' Exit Sub
' End Try
add_state = False
MessageBox.Show("บันทึกข้อมูลเสร็จแล้ว ", "แจ้งให้ทราบ", MessageBoxButtons.OK, MessageBoxIcon.Information)
Call lock_object()
Call Show()
End Sub
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
addNewMode = True 'แสดงโหมดการทำงานแบบเพิ่มเรคอร์ดใหม่
currRecPos = bin.Position 'เก็บตำแหน่งเรคอร์ดปัจจุบันใน datatable ไว้ที่ currRecPos
bin.AddNew() 'เพิ่มเรคอร์ดใหม่ว่างๆ 1 เรคอร์ดใน datatable
EnabledReadWrite() 'ให้เท็กซ์บ็อกซ์ทั้งหมดแสดงข้อมูลแบบอ่านเขียนได้
txtLANDID.Focus()
End Sub
Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click
bin.Position = 1
End Sub
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
'เช็คตำแหน่งด้วย เพราะถ้าเลย มันจะ Error
bin.Position -= 1
End Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
'เช็คตำแหน่งด้วย เพราะถ้าเลย มันจะ Error
bin.Position += 1
End Sub
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click
bin.Position = objCurrencyMgr.Count - 1
End Sub
Private Sub btndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndelete.Click
If dtTable.Rows.Count <= 0 Then
Exit Sub 'ถ้าเป็น datatable ว่าง ให้ออกจาก Procedure นี้
'ถ้าไม่ใช่ datatable ว่าง และผู้ใช้ยืนยันการลบ
ElseIf MessageBox.Show("ต้องการลบเรคอร์ดนี้ใช่หรือไม่?", "ยืนยันการลบ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = vbYes Then
bin.RemoveCurrent() 'ให้ลบเรคอร์ดปัจจุบันออกจาก datatable
'ลบออกจากฐานข้อมูลตอนบันทึกก็ได้ dtAdapter.Update(dtTable) 'และลบเรคอร์ดนี้ออกจากฐานข้อมูลด้วย
'เวลา Update มีแก้ไขหรือลบไปกี่เรคคอร์ด มันจะจัดการให้หมด
currRecPos = bin.Position 'เก็บเรคอร์ดปัจจุบันบนฟอร์มไว้ที่ currRecPos
End If
If dtTable.Rows.Count = 0 Then 'ถ้าลบเรคอร์ดใน datatable จนหมด
DisabledReadWrite() 'ให้เท็กซ์บ็อกซ์ทั้งหมดแสดงข้อมูลแบบอ่านได้อย่างเดียว
End If
End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
If dtTable.Rows.Count <= 0 Then
Exit Sub 'ถ้าเป็น datatable ว่าง ให้ออกจาก Procedure นี้
Else 'ถ้าไม่ใช่ datatable ว่าง
addNewMode = False 'แสดงโหมดการทำงานแบบแก้ไขเรคอร์ด
EnabledReadWrite() 'ให้เท็กซ์บ็อกซ์ทั้งหมดแสดงข้อมูลแบบอ่านเขียนได้
currRecPos = bin.Position 'เก็บเรคอร์ดปัจจุบันบนฟอร์มไว้ที่ currRecPos
txtLANDID.Focus() 'เลื่อนเคอร์เซอร์รับข้อมูลบนจอภาพไปที่ช่องชื่อ
End If
End Sub
Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.SqlClient
Imports System.Globalization
Imports System.Drawing.Printing
Public Class Land
Dim Conn As SqlConnection = New SqlConnection
Dim da As SqlDataAdapter
Dim add_state As Boolean = False
Dim dt As DataTable = New DataTable
Private bin As New BindingSource
Dim Today As Date
Dim CurrentRecord As Integer = 0
Dim Recordcount As Integer = 0
Dim UseFont As New Font("MS Sans Serif", 10)
Dim prDoc As PrintDocument = New PrintDocument
Private prDlg As PrintDialog = New PrintDialog
Dim dtTable As DataTable
Dim objCurrencyMgr As CurrencyManager
Dim currRecPos As Integer
Dim addNewMode As Boolean
Dim fdName As String
Dim sHelpFile As String
Dim ActionFlag As String = ""
Dim LastRevenueID As String = ""
Dim Dtflnfo As DateTimeFormatInfo
Dim IsFind As Boolean = False
Private Sub Land_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strConn As String
strConn = "Data Source=.\SQLEXPRESS;Initial Catalog=SSPEGIS;Integrated Security=True"
Conn = New SqlConnection(strConn)
Dim sqlland As String = ""
sqlland = "SELECT * FROM land ORDER BY LANDID"
da = New SqlDataAdapter(sqlland, Conn)
da.Fill(dt)
Dim cmb As SqlCommandBuilder
cmb = New SqlCommandBuilder(da)
bin.DataSource = dt
Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click
bin.Position = 1
End Sub
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
bin.Position -= 1
End Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
bin.Position += 1
End Sub
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click
bin.Position = -1 ''''''''ตรงนี้อะครับมันไม่ไปที่ตำแหน่งสุดท้าย
End Sub
Private Sub btndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndelete.Click
If dtTable.Rows.Count <= 0 Then '''''''''มัน RunTIME error ตรงนี้ครับ
Exit Sub
ElseIf MessageBox.Show("ต้องการลบเรคอร์ดนี้ใช่หรือไม่?", "ยืนยันการลบ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = vbYes Then
bin.RemoveCurrent()
currRecPos = bin.Position
End If
If dtTable.Rows.Count = 0 Then
'DisabledReadWrite() '''''''''''''''''''''''''ตรงนี้อะครับมันใช้ไม่ได้มันขึ้นSyntex Error
End If
End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
If dtTable.Rows.Count <= 0 Then '''''''''มัน RunTIME error ตรงนี้ครับ
Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.SqlClient
Public Class Land
Dim Conn As SqlConnection = New SqlConnection
Dim da As SqlDataAdapter
Dim add_state As Boolean = True
Dim dt As New DataTable
Private bin As New BindingSource
Dim objCurrencyMgr As CurrencyManager
Dim currRecPos As Integer
Dim addNewMode As Boolean
Private Sub Land_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strConn As String
strConn = "Data Source=.\SQLEXPRESS;Initial Catalog=SSPEGIS;Integrated Security=True"
Conn = New SqlConnection(strConn)
Dim sqlland As String = ""
sqlland = "SELECT * FROM land ORDER BY LANDID"
da = New SqlDataAdapter(sqlland, Conn)
da.Fill(dt)
Dim cmb As SqlCommandBuilder
cmb = New SqlCommandBuilder(da)
bin.DataSource = dt
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
addNewMode = True
currRecPos = bin.Position
bin.AddNew()
'EnabledReadWrite()
lblLANDID.Focus()
End Sub
Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click
bin.Position = 1
End Sub
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
bin.Position -= 1
End Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
bin.Position += 1
End Sub
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click
bin.Position = bin.Count - 1
End Sub
Private Sub btndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndelete.Click
If dt.Rows.Count <= 0 Then
Exit Sub
ElseIf MessageBox.Show("ต้องการลบเรคอร์ดนี้ใช่หรือไม่?", "ยืนยันการลบ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = vbYes Then
bin.RemoveCurrent()
currRecPos = bin.Position
End If
If dt.Rows.Count = 0 Then
'DisabledReadWrite()
End If
End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
If dt.Rows.Count <= 0 Then
Exit Sub
Else
addNewMode = False
'EnabledReadWrite()
currRecPos = bin.Position
lblLANDID.Focus()
End If
End Sub
Private Sub btnprint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnprint.Click
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
'เอาชุดนี้ใส่เข้าไป
Dim dtChange As DataTable = dt.GetChanges
Try
bin.EndEdit()
da.Update(dtChange)
dt.AcceptChanges()
Catch ex As SqlException
MessageBox.Show(ex.Message)
End Try
'Call lock_object()
Call Show()
End Sub
[font=Verdana]-------------------------------------------------------------[/font]
If dt.Rows.Count <= 0 Then --> Count ไม่มีน้อยกว่า 0 เอา < ออกไป
Private Sub btndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndelete.Click
If dt.Rows.Count = 0 Then Exit Sub
If MessageBox.Show("ต้องการลบเรคอร์ดนี้ใช่หรือไม่?", "ยืนยันการลบ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = vbYes Then
bin.RemoveCurrent()
currRecPos = bin.Position
End If
If dt.Rows.Count = 0 Then
'DisabledReadWrite()
End If
Dim dtChange As DataTable = dt.GetChanges
if dtChange isNot Nothing then
Try
da.Update(dtChange)
dt.AcceptChanges()
Catch ex As SqlException
MessageBox.Show(ex.Message)
End Try
End if
ย้าย EndEdit ขึ้นไปไว้บรรทัดแรกหรือยัง
ถ้าย้ายแล้ว ลองย้ายการประกาศ dtChange ไปไว้นอก Sub และ ลาก DataGridView มาไว้ใน From
นำ dtChange ไป Bind กับ DataGridView ที่สร้างขึ้นมาโดยที่คำสั่ง Save ให้ทำอย่างนี้
Private dtChange As DataTable
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
bin.EndEdit()
dtChange = dt.GetChanges
if dtChange isNot Notthing then ---> ใส่ BrackPoint ไว้ตรงนี้ แล้วดูว่ามันวิ่งเข้าไปทำงานใน If หรือเปล่า
Me.DataGridView1.DataSource = dtChange
End if
ส่วนนี้ ใส่เครื่อง Single quotes (') เพื่อพักไว้ก่อน
'Try
'da.Update(dtChange)
'dt.AcceptChanges()
'Catch ex As SqlException
'MessageBox.Show(ex.Message)
'End Try
ปกติก่อนเรียกใช้ da.Update(...)
ต้องมีการกำหนด
da.UpdateCommand = new SqlCommand(.....)
da.DeleteCommand = new SqlCommand(.....)
da.InsertCommand = new SqlCommand(.....)
ผมมักจะใช้วิธีนี้ ใน Module ของการบันทึกข้อมูล
มันอาจจะสะกดผิดบ้างตัว
เพราะตอนนี้ไม่มี VS ช่วย
Code (VB.NET)
Try
' อ่าน Primary ตัวสุดท้าย
Dim sqlCmd As SqlCommand = sqlCn.CreateCommand()
SQL = "SELECT PK=ISNULL((SELECT TOP 1 x.PK FROM Table1 ORDER BY x.PK DESC),0), SysDate=GETDATE()"
sqlCmd.CommandText = SQL
Dim dread As SqlDataReader = sqlCmd.ExecuteReader()
If dread.Read() Then
NewID = dread("PK")
SysDate = dread("SysDate")
End If
dread.Close()
stErr = ""
For Each drow dtable.Rows
blUpdate = False
' ส่วนของการ Validate ข้อมูล
If (drow.RowState And 20) > 0 Then
' มีการแก้ไขหรือเพิ่มข้อมูล
If <เงื่อนไขตรวจสอบความถูกต้องของข้อมูล 1> Then stErr += vbCrLf +"- ข้อผิดพลาด 1"
If <เงื่อนไขตรวจสอบความถูกต้องของข้อมูล 2> Then stErr += vbCrLf +"- ข้อผิดพลาด 2"
If stErr<>"" Then Throw New Exception(stErr)
blUpdate = True
End If
' ส่วนของการ Update User และวันที่
If blUpdate Then
If drow.RowState = DataRowStat.Added Then
NewID += 1
drow("PK") = NewID
drow("usrInsert") = My.User.Name
drow("dtInsert") = SysDate
End If
drow("usrModify") = My.User.Name
drow("dtModify") = SysDate
End If
Next
da.Update(dtable)
Catch ex As Exception
......
End Try
Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.SqlClient
Public Class frmland
Dim Conn As SqlConnection = New SqlConnection
Dim da As SqlDataAdapter
Dim add_state As Boolean = True
Dim dt As New DataTable
Private bin As New BindingSource
Dim objCurrencyMgr As CurrencyManager
Dim currRecPos As Integer
Dim addNewMode As Boolean
Dim ds As DataSet = New DataSet
Dim IsFind As Boolean = False
Private Sub Land_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strConn As String
strConn = "Data Source=.\SQLEXPRESS;Initial Catalog=SSPEGIS2;Integrated Security=True"
Conn = New SqlConnection(strConn)
Dim sqlland As String = ""
sqlland = "SELECT * FROM land ORDER BY LANDID"
If IsFind = True Then
ds.Tables("land").Clear()
End If
da = New SqlDataAdapter(sqlland, Conn)
da.Fill(dt)
Dim cmb As SqlCommandBuilder
cmb = New SqlCommandBuilder(da)
bin.DataSource = dt
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
addNewMode = True
currRecPos = bin.Position
bin.AddNew()
'EnabledReadWrite()
txtLANDID.Focus()
End Sub
Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click
bin.Position = 1
End Sub
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
bin.Position -= 1
End Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
bin.Position += 1
End Sub
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click
bin.Position = bin.Count - 1
End Sub
Private Sub btndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndelete.Click
If dt.Rows.Count = 0 Then Exit Sub
If MessageBox.Show("ต้องการลบเรคอร์ดนี้ใช่หรือไม่?", "ยืนยันการลบ", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = vbYes Then
bin.RemoveCurrent()
currRecPos = bin.Position
End If
If dt.Rows.Count = 0 Then
'DisabledReadWrite()
End If
End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
If dt.Rows.Count <= 0 Then
Exit Sub
Else
addNewMode = False
'EnabledReadWrite()
currRecPos = bin.Position
txtLANDID.Focus()
End If
End Sub
Private Sub btnprint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnprint.Click
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
Try
' เปิดคอนเน็คชั่น da.Connection
If da.Connection.State <> ... จำไม่ได้ Then
da.Connection.Open()
End If
' อ่าน Primary ตัวสุดท้าย
Dim sqlCmd As SqlCommand = da.Connection.CreateCommand()
SQL = "SELECT PK=ISNULL((SELECT TOP 1 LANDID FROM LAND ORDER BY LANDID DESC),0), SysDate=GETDATE()"
sqlCmd.CommandText = SQL
Dim dread As SqlDataReader = sqlCmd.ExecuteReader()
If dread.Read() Then
NewID = dread("PK")
SysDate = dread("SysDate")
End If
dread.Close()
bin.EndEdit()
dtChange = dt.GetChanges
If dtChange IsNot Nothing Then
Dim drow As DataRow
For Each drow in dtChange.Rows
blUpdate = False
' ส่วนของการ Validate ข้อมูล
If (drow.RowState And 20) > 0 Then
' มีการแก้ไขหรือเพิ่มข้อมูล
If <เงื่อนไขตรวจสอบความถูกต้องของข้อมูล 1> Then stErr += vbCrLf +"- ข้อผิดพลาด 1"
If <เงื่อนไขตรวจสอบความถูกต้องของข้อมูล 2> Then stErr += vbCrLf +"- ข้อผิดพลาด 2"
If stErr<>"" Then Throw New Exception(stErr)
blUpdate = True
End If
' ส่วนของการ Update User และวันที่
If blUpdate Then
If drow.RowState = DataRowStat.Added Then
NewID += 1
drow("LANDID") = NewID
drow("usrInsert") = My.User.Name
drow("dtInsert") = SysDate
End If
drow("usrModify") = My.User.Name
drow("dtModify") = SysDate
End If
Next
da.Update(dtChange)
dt.AcceptChanges()
MessageBox.Show("บันทึกข้อมูลเสร็จแล้ว ", "แจ้งให้ทราบ", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
da.Connection.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Call Show()
End Sub