转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
透过vs.net数据窗体向导看Ado.net         ★★★★

透过vs.net数据窗体向导看Ado.net

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1133 更新时间:2009/4/23 10:41:06

透过vs.net数据窗体向导看Ado.net

郑佐2005-1-1

     在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()方法来改变导航按钮之间的索引显示。

 

五.数据编辑

从添加方法中我们可以看到下面代码:

// 清除当前编辑内容

this.BindingContext[objMyDataSet,"Categories"].EndCurrentEdit();

经常有人在csdn上提问为什么在编辑DataGrid或TextBox的时候,只有当编辑框失去焦点的时候才会被保存。要实现不改变焦点就保存可以通过上面代码实现。

相对应的取消如下:

this.BindingContext[objMyDataSet,"Categories"].CancelCurrentEdit();

删除数据的代码如下:

this.BindingContext[objMyDataSet,"Categories"].RemoveAt(this.BindingContext[objMyDataSet,"Categories"].Position);

看到上面代码发现原来数据不是真正的在数据源删除,不过我们开发的时候可能用的更多的是DataRow的Delete()方法,这样能够提交数据更新到数据源。

 

六.数据更新

向导生成的代码如下:

public void UpdateDataSet()

{

     // 创建一个新数据集来保存对主数据集所做的更改。

 &nbs

[1] [2]  下一页


[VB.NET程序]ADO 在informix的 Addnew  [VB.NET程序]ADO 的测试
[VB.NET程序]ADO 揭密 1  [Web开发][ADO]如何修改ADO的线程模型
[Web开发]Delphi7下仿Ado.Net类的实现  [Web开发]通过COM使用ADO
[Web开发]ADO & ADO.NET中使用存储过程的两个共用的函数  [Web开发]Binding a DataGrid to an ADO Recordset
[Web开发]ADOCE for ADO Programmers  [Web开发]Delphi多线程下的ADO编程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台