和其它的BLL class类一样,SuppliersBLLWithSprocs有一个protected Adapter属性,2个public方法:GetSuppliers 和 UpdateSupplier.其中,GetSuppliers方法调用Data Access Layer层对应的GetSupplier方法,该方法将SuppliersDataTable返回给BLL层;而UpdateSupplier方法通过调用DAL层的GetSupplierBySupplierID(supplierID)方法来获取某人具体supplier的信息,然后更新其CategoryName, ContactName,ContactTitle属性,再将修改后的SuppliersRow对象传递给Data Access Layer层的 Update方法,以对数据库做相应的更新.
注意:除了SupplierID 和 CompanyName外,Suppliers表的所有列都允许为NULL值,所以如果传递的contactName 或 contactTitle参数为null的话,我们将分别调用SetContactNameNull 和 SetContactTitleNull方法来将ContactName 和 ContactTitle 属性设置为NULL.
第七步: 在表现层处理Computed Column列
做完了所有的必要工作后, 我们将创建一个ASP.NET页面来处理FullContactName列, 打开AdvancedDAL文件夹里的ComputedColumns.aspx 页面,拖一个GridView控件到页面,设其ID为Suppliers,在其智能标签里绑定到一个名为SuppliersDataSource的ObjectDataSource控件,设置其调用SuppliersBLLWithSprocs类,点Next.
图11:设置ObjectDataSource调用SuppliersBLLWithSprocs Class类
在SuppliersBLLWithSprocs类里只有2个方法GetSuppliers 和 UpdateSupplier.确保在SELECT 和 UPDATE标签里分别选中这2个方法,点Finish完成设置.完成设置后,Visual Studio将添加相应的BoundField,移除SupplierID列,并将CompanyName, ContactName, ContactTitle,和FullContactName列的HeaderText属性分别设置为“Company”, “Contact Name”, “Title”,“Full Contact Name”,再启用GridView的编辑功能.
Visual Studio将ObjectDataSource控件的OldValuesParameterFormatString属性设置为“original_{0}”. 我们要将其改为默认值“{0}”.如此这般,GridView 和 ObjectDataSource控件的声明代码看起来和下面的差不多:
<asp:GridView runat="server" AutoGenerateColumns="False" DataKeyNames="SupplierID" DataSourceID="SuppliersDataSource"> <Columns> <asp:CommandField ShowEditButton="True" /> <asp:BoundField DataField="CompanyName" HeaderText="Company" SortExpression="CompanyName" /> <asp:BoundField DataField="ContactName" HeaderText="Contact Name" SortExpression="ContactName" /> <asp:BoundField DataField="ContactTitle" HeaderText="Title" SortExpression="ContactTitle" /> <asp:BoundField DataField="FullContactName" HeaderText="Full Contact Name" SortExpression="FullContactName" ReadOnly="True" /> </Columns> </asp:GridView> <asp:ObjectDataSource runat="server" SelectMethod="GetSuppliers" TypeName="SuppliersBLLWithSprocs" UpdateMethod="UpdateSupplier"> <UpdateParameters> <asp:Parameter Type="String" /> <asp:Parameter Type="String" /> <asp:Parameter Type="String" /> <asp:Parameter Type="Int32" /> </UpdateParameters> </asp:ObjectDataSource>
接下来我们在浏览器里登录该页面,如图12所示。每行都有一个FullContactName列,格式为“ContactName (ContactTitle, CompanyName)”.