对于那些不返回PriceQuartile数据域的方法而言,PriceQuartile列的值由其DefaultValue属性指定. 如图2所示,该默认值为DBNull。如果你想指定为其他值,仅仅改动DefaultValue属性即可,但一定要是一个有效的值(比如,PriceQuartile列的值一定要是一个System.Int32类型的值).
现在我们完成了向DataTable添加额外列的必要的步骤,接下来我们要创建一个ASP.NET 页面来展示每个产品的 name, price,以及price quartile.不过我们要先对业务逻辑层进行更新,以包含一个方法来调用数据访问层的GetProductsWithPriceQuartile方法.我们将在第3步更新业务逻辑层,在第4步创建一个ASP.NET页面.
第三步:更新业务逻辑层
我们在表现层调用新添加的GetProductsWithPriceQuartile方法以前,必须在业务逻辑层添加相应的方法,打开ProductsBLLWithSprocs class类文件,添加如下的代码:
[System.ComponentModel.DataObjectMethodAttribute (System.ComponentModel.DataObjectMethodType.Select, false)] public NorthwindWithSprocs.ProductsDataTable GetProductsWithPriceQuartile() { return Adapter.GetProductsWithPriceQuartile(); }
就像其它方法一样,GetProductsWithPriceQuartile仅仅调用数据访问层对应的GetProductsWithPriceQuartile方法并返回其结果.
第四步:在一个ASP.NET页面展示Price Quartile信息
完成对业务逻辑层的修改后,我们将创建一个ASP.NET页面来显示每个产品的price quartile信息.打开AdvancedDAL文件夹里的AddingColumns.aspx页面,从工具箱拖一个 GridView控件到页面,设置其ID为Products.在其智能标签里将其绑定到一个名为ProductsDataSource的新的ObjectDataSource控件,设置该控件调用ProductsBLLWithSprocs class类的GetProductsWithPriceQuartile方法,在UPDATE, INSERT,和DELETE标签里选“(None)”.
图9:设置ObjectDataSource调用ProductsBLLWithSprocs类
图10:调用GetProductsWithPriceQuartile方法获取产品信息
完成设置向导后, Visual Studio会为GridView添加BoundField或CheckBoxField列,其中包括PriceQuartile列. 将ProductName, UnitPrice,PriceQuartile以外的列全部删除,设置UnitPrice列为货币格式.并将UnitPrice 和 PriceQuartile列放在右边,居中。 最后分别将这3列的HeaderText属性设置为“Product”, “Price”,“Price Quartile”。同时启用GridView控件的排序功能.
作上述修改后, GridView 和 ObjectDataSource控件的声明代码看起来和下面的差不多:
<asp:GridView runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="ProductsDataSource"> <Columns> <asp:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" /> <asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" HeaderText="Price" HtmlEncode="False" SortExpression="UnitPrice"> <ItemStyle HorizontalAlign="Right" /> </asp:BoundField> <asp:BoundField DataField="PriceQuartile" HeaderText="Price Quartile" SortExpression="PriceQuartile"> <ItemStyle HorizontalAlign="Center" /> </asp:BoundField> </Columns> </asp:GridView> <asp:ObjectDataSource runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetProductsWithPriceQuartile" TypeName="ProductsBLLWithSprocs"> </asp:ObjectDataSource>
如图11为在浏览器里登录该页面的情况,我们注意到,最开始产品按price的降序排列,同时每个产品都有相应的PriceQuartile值,当然这些数据也可以按其它标准来排序,如图12所示。
图11:产品按Prices来排序
图12:产品按名称来排序.
注意:只需要很少的代码,我们就可以根据每行PriceQuartile值的不同而显示不同的颜色,比如对值为1的行显示为浅绿色,对值为2的行显示为浅黄色,以此类推.你可以花点时间来实现该功能,如果有必要的话,你可以参阅第11章《基于数据的自定义格式化》
另一种途径——创建另一个TableAdapter