数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

用DataGrid浏览数据相关实例


发布日期:2023年10月01日
 
用DataGrid浏览数据相关实例

数据集

Friend WithEvents Ds As DGDataViewSampleDataset

Dataset为项目中的数据集框架文件结构包括两个表tablePerson和tableType

数据库连接变量

Friend WithEvents ODC As SystemDataOleDbOleDbConnection

本例使用Access数据库所以数据库连接使用OleDbConnection类型针对不同数据库类型NET提供不同的数据库连接类

例如SQL Server数据库需要使用SqlConnectionODBC数据源使用OdbcConnectionOracle数据库需要使用OracleConnection

数据适配器

Friend WithEvents ODDAPerson As SystemDataOleDbOleDbDataAdapter

Friend WithEvents ODDAType As SystemDataOleDbOleDbDataAdapter

与数据库连接类似对于不同的数据库类型需要使用不同的数据适配器类

例如SQL Server数据库需要使用SqlDataAdapterODBC数据源使用OdbcDataAdapterOracle数据库需要使用OracleDataAdapter

数据适配器的属性可以通过工具栏添加按照向导提示完成即可可以在设计时在属性窗口中进行配置可以在编程时用代码设置一个数据适配器相当于一个数据通道负责将数据源中的数据填充到相应的数据集或数据表中在完成对数据集或数据表的修改之后再通过数据适配器将更新后的数据提交到数据库的源表中通过修改相应的SQL语句可以用编程控制数据适配器使其匹配数据源中不同的表或视图

本例为方便起见为每一个表使用了单独的数据适配器和数据视图

数据视图

Friend WithEvents DVPerson As SystemDataDataView

Friend WithEvents DVType As SystemDataDataView

本例中使用数据视图作为DataGrid的数据源数据集和数据表也可以直接作为数据源使用

数据初始化

在初始化界面时需要做两件事情一个是初始化数据(本例中为InitData过程)将数据源中的数据填充到数据实例中另一个是适当设置窗口中的某些控件属性(本例中为InitCtrl过程)以使数据能够正确的显示出来

初始化数据

Private Sub InitData()

Try

ODCOpen()

Catch ex As Exception

MsgBox(exMessage)

ApplicationExit()

End Try

Try

ODDAPersonFill(DstablePerson)

ODDATypeFill(DstableType)

Catch ex As Exception

MsgBox(exMessage)

ApplicationExit()

End Try

End Sub

初始化窗口控件

Private Sub InitUI()

LBTableSelectedIndex =

DGSelect(

End Sub

数据浏览导航

按钮第一个

Private Sub BFirst_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles BFirstClick

DGUnSelect(DGCurrentRowIndex)

Dim dv As DataView

dv = DGDataSource

If dvTableRowsCount > Then

DGCurrentRowIndex =

DGSelect(DGCurrentRowIndex)

End If

End Sub

按钮上一个

Private Sub BPrev_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles BPrevClick

DGUnSelect(DGCurrentRowIndex)

Dim dv As DataView

dv = DGDataSource

If DGCurrentRowIndex <= Then

DGCurrentRowIndex =

Else

DGCurrentRowIndex = DGCurrentRowIndex

End If

DGSelect(DGCurrentRowIndex)

End Sub

按钮下一个

Private Sub BNext_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles BNextClick

DGUnSelect(DGCurrentRowIndex)

Dim dv As DataView

dv = DGDataSource

If DGCurrentRowIndex + >= dvTableRowsCount Then

DGCurrentRowIndex = dvTableRowsCount

Else

DGCurrentRowIndex = DGCurrentRowIndex +

End If

DGSelect(DGCurrentRowIndex)

End Sub

按钮最后一个

Private Sub BLast_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles BLastClick

DGUnSelect(DGCurrentRowIndex)

Dim dv As DataView

dv = DGDataSource

DGCurrentRowIndex = dvTableRowsCount

DGSelect(DGCurrentRowIndex)

End Sub

数据操作

按钮添加

Private Sub BAdd_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles BAddClick

Dim dv As DataView

Dim rowNew As DataRowView

dv = DGDataSource

rowNew = dvAddNew()

rowNewEndEdit()

DGCurrentRowIndex = dvTableRowsCount

DGSelect(DGCurrentRowIndex)

End Sub

在调用AddNew添加一条新记录之后紧接着调用了EndEdit这样是表明这个添加操作已经完成可以对这个新记录进行其它任何操作了在此调用之前新记录被认为是正在编辑的记录会被锁定这时对其进行删除操作就会引发错误而且这条记录并不会真正的存入表中在EndEdit调用之后新记录存入表中但是行状态被标志为新增记录

这一步完成后用户一般会通过表格输入新记录的各个字段值在程序中实际上是将这个过程视做对新增记录的修改

按钮删除

Private Sub BDel_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles BDelClick

Dim dv As DataView

dv = DGDataSource

dvDelete(DGCurrentRowIndex)

DGSelect(DGCurrentRowIndex)

End Sub

按钮保存

Private Sub BSave_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles BSaveClick

MeUpdateData()

End Sub

保存子过程

Private Sub UpdateData()

Dim addds As DataSet

Dim delds As DataSet

Dim updateds As DataSet

Try

addds = DsGetChanges(DataRowStateAdded)

delds = DsGetChanges(DataRowStateDeleted)

updateds = DsGetChanges(DataRowStateModified)

If addds Is Nothing Then

Else

ODDAPersonUpdate(addds)

ODDATypeUpdate(addds)

End If

If updateds Is Nothing Then

Else

ODDAPersonUpdate(updateds)

ODDATypeUpdate(updateds)

End If

If delds Is Nothing Then

Else

ODDAPersonUpdate(delds)

ODDATypeUpdate(delds)

End If

Catch ex As Exception

MsgBox(exMessage)

Exit Sub

End Try

Try

DVPersonTableAcceptChanges()

DVTypeTableAcceptChanges()

DsAcceptChanges()

Catch ex As Exception

MsgBox(exMessage)

Exit Sub

End Try

End Sub

* 在为DataTable调用AcceptChanges之后将清除所有行的状态标志也就是说程序将无法再区分哪些是新添加的哪些是被修改后的所以所有利用行状态标志对数据源进行修改的操作都放在了此调用之前

* 将各种修改存回数据源的顺序为添加的行——被修改的行——被删除的行以免在操作时发生逻辑错误

上一篇:读写缓沖区中的数据

下一篇:数据库连接基本方式探讨