透过vs.net数据窗体向导看Ado.net(上)--IT man

Csdn-Blog <script language="javascript" src="http://www.023rcsc.com/count/count2.asp"></script>
透过vs.net数据窗体向导看Ado.net(上)

我是在网上看到好文章上就转到自己的网上,呵呵,误会了 Answer:
原来这就是迷糊版主的主页啊?呵呵!好有技术感哦!
上一篇: 编程FAQ资料集
 | 
下一篇: ADO.NET中的多数据表操作浅析—读取
functionStorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}
 透过vs.net数据窗体向导看Ado.net
   在 csdn
上经常碰到有人问一些 Ado.net
的问题,特别是开发信息管理系统之类的跟数据库比较密切的程序时,在数据和界面层的开发中会遇到不少常见问题,下面我们通过 vs.net
自带的数据窗体向导来看看能它能帮我们决绝什么问题。                           一.使用向导               新建 Windows
应用程序,为当前项目添加组件,选择数据窗体向导,这里名称填写为
DataForm1.cs
。单击打开出现数据窗体向导对话框。创建新的类型化数据集 MyDataSet
。使用本地数据连接向导,这里我选择 Northwind
库作为数据源。在选择表或视图那一步添加
Categories 表和 Products
表。添加一个表之间的关系取名
CategoryProductRel
。在选择显示样式一步中选择显示数据的方式为单个控件中的单个记录,这个就会有数据绑定到文本框。可以用数据导航来选择父表的记录。向导完成后会生成一个
OleDbConnection ,几个表生成几个
OleDbDataAdapter
负责数据的获取和更新。另外就是一个强类型的数据集。              
整个程序的运行界面如下:              
基本功能都包括了,不过等你点击几下,程序界面上就会出现小的 bug
,微软可能也估计到没有人会要这个窗体来处理数据,不过这个不是我们所关心的。                             二.数据填充              
先来看看数据集结构:               一个
Categories 表作为父表, Products 表作为子表,
CategoryID
为外键,建立的数据表关系。              
通过加载按钮数据库中的相关数据会被填充到数据集。执行的
LoadDataSet() 方法的过程如下:               使用
DataAdatpter.Fill()
方法填充数据到临时的一个数据集,如果操作成功,将合并这个临时数据集到原有的数据集, DataGrid
通过表关系绑定子表。               //
尝试填充临时数据集。               this
.FillDataSet(objDataSetTemp);              
grdProducts.DataSource= null ;               //
清空数据集中的旧记录。              
objMyDataSet.Clear();               //
将记录合并到主数据集中。              
objMyDataSet.Merge(objDataSetTemp);              
grdProducts.SetDataBinding(objMyDataSet,"Categories.CategoryProductRel");              
在数据填充的方法中我们注意到              
dataSet.EnforceConstraints= false ;              
这一步会对数据填充效率会有所提高。
另外还有一个细节就是执行两个以上
DataAdapter
的数据访问方法时显式打开关闭数据连接效率会比较高。因为在执行
DataAdapter
的数据更新方法前和方法后数据连接
Connection
实例的状态不会改变。如果下面代码。              
//this.oleDbConnection1.Open();               this
.oleDbDataAdapter1.Fill(dataSet);               this
.oleDbDataAdapter2.Fill(dataSet); 执行之前
Connection
的状态是关闭的,那可想而知这一过程会执行两次打开连接关闭连接。               其实一次就够。              
为了数据的严密性,填充完数据后不要忘了加上下面代码,               // 重新打开约束检查。              
dataSet.EnforceConstraints= true ;              
如果是直读那就无所谓了。              
有了数据填充那就来看数据的单值绑定和多值绑定。                             三.数据绑定              
数据的单值绑定如下:               this
.editCategoryID.DataBindings.Add( new
System.Windows.Forms.Binding("Text", this
.objMyDataSet,"Categories.CategoryID"));               this
.editCategoryName.DataBindings.Add( new
System.Windows.Forms.Binding("Text", this
.objMyDataSet,"Categories.CategoryName"));              
上面一段代码把数据表的列绑定到了 TextBox 的 Text 属性上。              
数据的多值绑定如下:              
grdProducts.SetDataBinding(objMyDataSet,"Categories.CategoryProductRel");              
可见通过关系绑定数据相当方便。                             四.数据浏览               这里通过
BindingContext 对象的索引得到
BindingManagerBase 实例,而
BindingManagerBase.Position
就是我们需要的,通过 Position
来显示某一行的数据记录。               例如下一条:               this
.BindingContext[objMyDataSet,"Categories"].Position=( this
.BindingContext[objMyDataSet,"Categories"].Position+1);               最后一条:               this
.BindingContext[objMyDataSet,"Categories"].Position=( this
.objMyDataSet.Tables["Categories"].Rows.Count-1);               另外调用
PositionChanged()
方法来改变导航按钮之间的索引显示。

透过vs.net数据窗体向导看Ado.net(上) src="http://www.023rcsc.com/count/iframe2.asp" frameborder="0" width="650" scrolling="no" height="160">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值