數據集 Friend WithEvents Ds
As DGDataViewSample
Dataset
Dataset
為項目中的數據集框架文件
結構包括兩個表
tablePerson和tableType
數據庫連接變量 Friend WithEvents ODC As System
Data
OleDb
OleDbConnection
本例使用Access數據庫
所以數據庫連接使用OleDbConnection類型
針對不同
數據庫類型
NET提供不同的數據庫連接類
例如SQL Server數據庫需要使用SqlConnection
ODBC數據源使用OdbcConnection
Oracle數據庫需要使用OracleConnection
數據適配器 Friend WithEvents ODDAPerson As System
Data
OleDb
OleDbDataAdapter
Friend WithEvents ODDAType As System
Data
OleDb
OleDbDataAdapter
與數據庫連接類似
對於不同的數據庫類型
需要使用不同的數據適配器類
例如SQL Server數據庫需要使用SqlDataAdapter
ODBC數據源使用OdbcDataAdapter
Oracle數據庫需要使用OracleDataAdapter
數據適配器的屬性可以通過工具欄添加
按照向導提示完成即可
可以在設計時在屬性窗口中進行配置
可以在編程時用代碼設置
一個數據適配器相當於一個數據通道
負責將數據源中的數據填充到相應的數據集或數據表中
在完成對數據集或數據表的修改之後
再通過數據適配器將更新後的數據提交到數據庫的源表中
通過修改相應的SQL語句
可以用編程控制數據適配器
使其匹配數據源中不同的表或視圖
本例為方便起見
為每一個表使用了單獨的數據適配器和數據視圖
數據視圖 Friend WithEvents DVPerson As System
Data
DataView
Friend WithEvents DVType As System
Data
DataView
本例中使用數據視圖作為DataGrid的數據源
數據集和數據表也可以直接作為數據源使用
數據初始化 在初始化界面時
需要做兩件事情
一個是初始化數據(本例中為InitData過程)
將數據源中的數據填充到數據實例中
另一個是適當設置窗口中的某些控件屬性(本例中為InitCtrl過程)
以使數據能夠正確的顯示出來
初始化數據 Private Sub InitData()
Try
ODC
Open()
Catch ex As Exception
MsgBox(ex
Message)
Application
Exit()
End Try
Try
ODDAPerson
Fill(Ds
tablePerson)
ODDAType
Fill(Ds
tableType)
Catch ex As Exception
MsgBox(ex
Message)
Application
Exit()
End Try
End Sub
初始化窗口控件
Private Sub InitUI()
LBTable
SelectedIndex =
DG
Select(
)
End Sub
數據浏覽導航 按鈕第一個
Private Sub BFirst_Click(ByVal sender As System
Object
ByVal e As System
EventArgs) Handles BFirst
Click
DG
UnSelect(DG
CurrentRowIndex)
Dim dv As DataView
dv = DG
DataSource
If dv
Table
Rows
Count >
Then
DG
CurrentRowIndex =
DG
Select(DG
CurrentRowIndex)
End If
End Sub
按鈕上一個
Private Sub BPrev_Click(ByVal sender As System
Object
ByVal e As System
EventArgs) Handles BPrev
Click
DG
UnSelect(DG
CurrentRowIndex)
Dim dv As DataView
dv = DG
DataSource
If DG
CurrentRowIndex
<
=
Then
DG
CurrentRowIndex =
Else
DG
CurrentRowIndex = DG
CurrentRowIndex
End If
DG
Select(DG
CurrentRowIndex)
End Sub
按鈕下一個
Private Sub BNext_Click(ByVal sender As System
Object
ByVal e As System
EventArgs) Handles BNext
Click
DG
UnSelect(DG
CurrentRowIndex)
Dim dv As DataView
dv = DG
DataSource
If DG
CurrentRowIndex +
>= dv
Table
Rows
Count Then
DG
CurrentRowIndex = dv
Table
Rows
Count
Else
DG
CurrentRowIndex = DG
CurrentRowIndex +
End If
DG
Select(DG
CurrentRowIndex)
End Sub
按鈕最後一個
Private Sub BLast_Click(ByVal sender As System
Object
ByVal e As System
EventArgs) Handles BLast
Click
DG
UnSelect(DG
CurrentRowIndex)
Dim dv As DataView
dv = DG
DataSource
DG
CurrentRowIndex = dv
Table
Rows
Count
DG
Select(DG
CurrentRowIndex)
End Sub
數據操作 按鈕添加
Private Sub BAdd_Click(ByVal sender As System
Object
ByVal e As System
EventArgs) Handles BAdd
Click
Dim dv As DataView
Dim rowNew As DataRowView
dv = DG
DataSource
rowNew = dv
AddNew()
rowNew
EndEdit()
DG
CurrentRowIndex = dv
Table
Rows
Count
DG
Select(DG
CurrentRowIndex)
End Sub
在調用AddNew添加一條新記錄之後
緊接著調用了EndEdit
這樣是表明這個添加操作已經完成
可以對這個新記錄進行其它任何操作了
在此調用之前
新記錄被認為是正在編輯的記錄
會被鎖定
這時對其進行刪除操作就會引發錯誤
而且這條記錄並不會真正的存入表中
在EndEdit調用之後
新記錄存入表中
但是行狀態被標志為新增記錄
這一步完成後
用戶一般會通過表格輸入新記錄的各個字段值
在程序中
實際上是將這個過程視做對新增記錄的修改
按鈕刪除
Private Sub BDel_Click(ByVal sender As System
Object
ByVal e As System
EventArgs) Handles BDel
Click
Dim dv As DataView
dv = DG
DataSource
dv
Delete(DG
CurrentRowIndex)
DG
Select(DG
CurrentRowIndex)
End Sub
按鈕保存
Private Sub BSave_Click(ByVal sender As System
Object
ByVal e As System
EventArgs) Handles BSave
Click
Me
UpdateData()
End Sub
保存子過程
Private Sub UpdateData()
Dim addds As DataSet
Dim delds As DataSet
Dim updateds As DataSet
Try
addds = Ds
GetChanges(DataRowState
Added)
delds = Ds
GetChanges(DataRowState
Deleted)
updateds = Ds
GetChanges(DataRowState
Modified)
If addds Is Nothing Then
Else
ODDAPerson
Update(addds)
ODDAType
Update(addds)
End If
If updateds Is Nothing Then
Else
ODDAPerson
Update(updateds)
ODDAType
Update(updateds)
End If
If delds Is Nothing Then
Else
ODDAPerson
Update(delds)
ODDAType
Update(delds)
End If
Catch ex As Exception
MsgBox(ex
Message)
Exit Sub
End Try
Try
DVPerson
Table
AcceptChanges()
DVType
Table
AcceptChanges()
Ds
AcceptChanges()
Catch ex As Exception
MsgBox(ex
Message)
Exit Sub
End Try
End Sub
* 在為DataTable調用AcceptChanges之後
將清除所有行的狀態標志
也就是說
程序將無法再區分哪些是新添加的
哪些是被修改後的
所以所有利用行狀態標志對數據源進行修改的操作都放在了此調用之前
* 將各種修改存回數據源的順序為
添加的行——被修改的行——被刪除的行
以免在操作時發生邏輯錯誤
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26069.html