65.9K
CodeProject 正在变化。 阅读更多。
Home

数据库导航器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.38/5 (8投票s)

2004年10月5日

3分钟阅读

viewsIcon

65651

downloadIcon

1070

一种使用 VCR 式控件轻松浏览记录的方法。

Sample Image - maximum width is 600 pixels

引言

我不确定是 Google 不起作用,还是仅仅是我的问题。 我已经在网上冲浪了好几天,搜索一个简单问题的简单解决方案:能够使用 VCR 式控件浏览数据库(我不敢相信我说了 VCR……我的意思是 DVD 控件。)

在 ASP.NET 中,从一条记录移动到另一条记录最简单的方法是放置一个 datagrid 或 datatable,但这正是我不想使用的。
我也遇到过一个 C# 软件,它与数据库导航器几乎一样,但代码非常 难以理解(至少对我而言……当然)。 由于有截止日期且手头没有解决方案,这就是我开发的,顺便说一句,它运行良好

第一次尝试

作为第一种方法,我创建了 4 个基本按钮和一个绑定到不同文本框的数据集。 我还创建了一个指向当前记录位置的索引,我将其存储在会话变量中,并在我按下不同的导航按钮时进行更改; 它生成了一条新的 SQL 指令,仅请求我必须在那个确切时刻放在屏幕上的特定记录,而且一切看起来都很好,直到我在数据库中间删除了一条记录,我得到的只是一个错误屏幕。 我意识到这种方法行不通。

解决方案

在尝试了许多不同的选择之后,我考虑使用一个 datagrid 来保存所有记录,但对用户隐藏,并且只在文本框中显示数据:现在我可以将所有信息放在表单的任何地方,而不是放在一个表格中,就像默认实现的那样…… 并且是的! 这次它奏效了!

安装

创建一个新的 ASP.NET VB 空项目,名为“databaseNavigator”; IIS 的默认文件夹和我们的项目应该在:C:\Inetpub\wwwroot\databaseNavigator'。 只需用 ZIP 文件中包含的内容覆盖该目录的内容即可。

数据库

在这个例子中,我还包含了一个小的 MS-Access 数据库,但我使用 MySQL 创建了应用程序。 我使用向导,因为我认为它更容易(尽管它也有一些不为人知的领域,我知道……我将在不久的将来写一篇关于它的文章)

关注点

DatabaseNavigator 将信息存储在两个会话变量中,actualRecordPositiontotalNumberOfRecordstotalNumberOfRecords 在 Page_Load() 期间获取其值,计算表中的所有记录

 dbConnection.Open()
 SQL.CommandText = "SELECT COUNT(*) FROM membersTable"
 Session("totalNumberOfRecords") = SQL.ExecuteScalar
 dbConnection.Close()
 dbAdapter.Dispose()

然后适配器被释放。 DatabaseNavigator 仅为单向通信(只读自数据库)。 我即将完成一个双向通信版本,其中包括 INSERT、UPDATE 和 DELETE 命令。

以下是 NEXT 按钮的代码,它基本上是增加记录位置的计数器,除非我们站在数据库的末尾。

Private Sub NEXTbutton_Click(ByVal sender As System.Object, 
  ByVal e As System.EventArgs) Handles NEXTbutton.Click
 Dim ARPTemp As Integer = CType(Session("actualRecordPosition"), Integer)
 Dim TNRTemp As Integer = CType(Session("totalNumberOfRecords"), Integer)
 If ARPTemp < TNRTemp Then
   ARPTemp += 1
 End If
 Session("actualRecordPosition") = ARPTemp
 updateInfo()
 End Sub 

最后,update() 子程序更新屏幕中的所有信息

 Private Sub updateInfo()
 hiddenDatagrid.SelectedIndex = (Session("actualRecordPosition".ToString) - 1)
 TotalNrOfRecordsTextbox.Text = Session("totalNumberOfRecords".ToString)
 currPositionInDbTextbox.Text = (Session("actualRecordPosition".ToString))
 selectedIdInDbTextbox.Text = hiddenDatagrid.SelectedItem.Cells(0).Text
 idTextbox.Text = hiddenDatagrid.SelectedItem.Cells(0).Text
 firstNameTextbox.Text = hiddenDatagrid.SelectedItem.Cells(1).Text
 lastNameTextbox.Text = hiddenDatagrid.SelectedItem.Cells(2).Text
 ageTextbox.Text = hiddenDatagrid.SelectedItem.Cells(3).Text

最后的寄语

好吧,我希望这篇文章对您有所帮助,就像写作对我有所帮助一样。 如果您有任何意见,请随时与我联系:julianarevalo [at] hotmail.com。 祝您好运,感谢您的阅读!

© . All rights reserved.