在ASP.NET 2.0中操作数据之十七:研究插入、更新和(6)

  当用户输入一个产品名称和价格(例如“Acme Wate”和1.99,如图17)并点击插入按钮,发生回传并且开始插入的工作流程,直到最后添加一个新产品记录到数据库。DetailsView维持在它的插入界面,并且GridView自动地重现绑定到它的数据源,目的是为了包含新增加的产品,如图18所示。

/uploads/allimg/200612/1KZ3D04_0.png

图 18: 产品“Acme Water”已经被添加到数据库

  虽然图18的GridView中没有显示出来,DetailsView界面里缺少的产品字段 – CategoryID、SupplierID、QuantityPerUnit、等等 – 被赋上一个数据库NULL值。你可以通过履行下面一个步骤来看到这一点:

1.到Visual Studio的服务器资源管理器

2.展开NORTHWND.MDF数据库节点

3.在Products数据表节电上右键点击

4.选择“显示表数据”

  这将列出Products表中的所有记录。如图19所示,除了ProductID、ProductName和UnitPrice字段,我们的新产品的其它字段都为NULL值。

/uploads/allimg/200612/1KUYD8_0.png

图 19: 未在DetailsView中提供的产品的其它字段被赋予NULL值

  我们可能希望给予一个或几个这些字段的值一个默认值,而不是NULL,要么是因为NULL并非最佳的默认项,要么是因为数据库字段本身不允许NULL值。为了实现这一点,我们可以编程设置这些DetailsView的InputParameters集合里的参数值。这项工作可以在DetailsView的ItemInserting事件处理程序中完成,或者在ObjectDataSource的Inserting事件处理程序。因为我们已经看过了如何在数据Web服务器控件中如何使用pre-和post-level的事件,这次让我们探究一下ObjectDataSource的事件。

第四步: 给CategoryID和SupplierID参数赋值

  在这里我们假设当我们的应用程序通过这个界面添加一个新产品时应该给CategoryID和SupplierID字段赋值为1。如之前提及的,ObjectDataSource控件有一对pre-和post-level的事件发生在数据更改过程中。当它的Insert()方法被调用时,ObjectDataSource首先触发它的Inserting事件,然后调用它的Insert()方法所映射到的业务方法,最后触发Inserted事件。这个Inserting事件处理程序提供给我们一个处理输入参数或者彻底取消此操作的最后机会。

  注意: 在一个真实的应用程序中你很可能希望既让用户指定category和supplier的值,又希望基于一定的标准和业务逻辑的基础上选择这个值(而不是盲目地选择ID为1)。不管如何,这个例子阐明了如何在ObjectDataSource的pre-level的事件中编程设置一个输入参数的值。

  花些时间为ObjectDataSource的Inserting事件创建一个事件处理程序。注意到该事件处理程序的第二个输入参数是一个ObjectDataSourceMethodEventArgs类型的对象,它有一个属性来存取参数集合(InputParameters),还有一个属性用来取消此操作(Cancel)。

protected void ObjectDataSource1_Inserting (object sender, ObjectDataSourceMethodEventArgs e) { }

  此时,InputParameters属性包含了通过DetailsView赋值到ObjectDataSource的InsertParameters集合。为了修改这些参数里的一个值,简单地使用:e.InputParameters["paramName"] = value 。所以,为了设置CategoryID和SupplierID为1,把Inserting事件处理程序调整为如下:

protected void ObjectDataSource1_Inserting (object sender, ObjectDataSourceMethodEventArgs e) { e.InputParameters["CategoryID"] = 1; e.InputParameters["SupplierID"] = 1; }

这次当我们添加一个新产品(例如Acme Soda),这个新产品的CategoryID和SupplierID字段被赋值为1(见图20)。

/uploads/allimg/200612/1KUX945_0.png

图 20: 现在,新产品的CategoryID和SupplierID字段被设置为1

总结

  在编辑、插入和删除的过程中,无论数据Web服务器控件还是ObjectDataSource都会发生许多pre-和post-level的事件。在这一节里,我们研究了pre-level的事件,并看到了如何在数据Web服务器控件和ObjectDataSource的事件里使用它们来自定义输入参数或取消当前的数据更改操作。下一节,我们将看看创建和使用post-level的事件的事件处理程序。

祝编程快乐!

作者简介

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwwpd.html