数据相关实例:
数据集
Friend WithEvents Ds1 As DGDataViewSample.Dataset1
Dataset1 为项目中的数据集框架文件,结构包括两个表: tablePerson 和 tableType
数据库连接变量
Friend WithEvents ODC As System.Data.OleDb.OleDbConnection
本例使用 Access 数据库,所以数据库连接使用 OleDbConnection 类型。针对不同 3 数据库类型, .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(Ds1.tablePerson)
ODDAType.Fill(Ds1.tableType)
Catch ex As Exception
MsgBox(ex.Message)
Application.Exit()
End Try
End Sub
初始化窗口控件
Private Sub InitUI()
LBTable.SelectedIndex = 0
DG.Select(0)
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 > 0 Then
DG.CurrentRowIndex = 0
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 - 1 <= 0 Then
DG.CurrentRowIndex = 0
Else
DG.CurrentRowIndex = DG.CurrentRowIndex - 1
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 + 1 >= dv.Table.Rows.Count Then
DG.CurrentRowIndex = dv.Table.Rows.Count - 1
Else
DG.CurrentRowIndex = DG.CurrentRowIndex + 1
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 - 1
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 - 1
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 = Ds1.GetChanges(DataRowState.Added)
delds = Ds1.GetChanges(DataRowState.Deleted)
updateds = Ds1.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()
</sp