因为GridView、DetailsView和FormView控件在数据修改功能和版面上都有所不同,就让我们逐个研究。不过,与其让这三个控件各自使用自己的ObjectDataSource,还不如让我们仅创建一个ObjectDataSource让这个三个控件的例子共用。
打开Basics.aspx页面,从工具箱拖拽一个ObjectDataSource到设计器,从它的职能标记中点击配置数据源链接。因为ProductsBLL类是唯一一个提供修改、插入和删除方法的BLL类,配置该ObjectDataSource使用这个类。
图 5: 配置ObjectDataSource使用ProductsBLL类
在下一屏中,通过选择适当的tab页并从下拉列表中选择方法,我们可以指定ProductsBLL类里的哪些方法被映射到ObjectDataSource的Select()、Insert()、Update()和Delete()方法。图6,至今我们应该很熟悉,映射ObjectDataSource的Select()方法到ProductsBLL类的GetProducts()方法。Insert()、Update()和Delete()方法可以通过选择上方的适当的tab页进行配置。
图 6: 让这个ObjectDataSource返回所有产品
图7、8和9显示ObjectDataSource的UPDATE、INSERT,和DELETE 的tab页。配置它们从而Insert()、Update()和Delete()方法分别调用ProductsBLL类的UpdateProduct、AddProduct和DeleteProduct方法。
图 7: 映射ObjectDataSource的Update()方法到ProductBLL类的UpdateProduct方法
图 8: 映射ObjectDataSource的Insert()方法到ProductBLL类的AddProduct方法
图 9: 映射ObjectDataSource的Delete()方法到ProductBLL类的DeleteProduct方法
你也许已经注意到在UPDATE、INSERT和DELETE的tab页里的下拉列表中已经选择了各自的方法。这是由于我们使用了DataObjectMethodAttribute,它修饰了ProducstBLL类。例如,DeleteProduct方法是如下这样子声明的:
[System.ComponentModel.DataObjectMethodAttribute (System.ComponentModel.DataObjectMethodType.Delete, true)] public bool DeleteProduct(int productID) { ... }
DataObjectMethodAttribute指示每一个方法的目的–是否为了查询、插入、更新或删除–
是否它的默认值。如果你在创建BLL类的时候省略了这些属性,现在你将需要手工从UPDATE、INSERT和DELETE的tab页里手工选择方法。
当确认已经适当的ProductsBLL方法映射到ObjectDataSource的Insert()、Update()和Delete()方法后,点击完成结束此向导。
检查ObjectDataSource的标记
在通过数据源配置向导完成了对ObjectDataSource的配置之后,到源视图去检查一下生成的声明标记。
<asp:ObjectDataSource>标签列明了隐含的对象和需要调用的方法。另外,还有DeleteParameters、UpdateParameters和InsertParameters ,它们映射ProductsBLL类的AddProduct、UpdateProduct和DeleteProduct方法的输入参数:
<asp:ObjectDataSource runat="server" DeleteMethod="DeleteProduct" InsertMethod="AddProduct" OldValuesParameterFormatString="original_{0}" SelectMethod="GetProducts" TypeName="ProductsBLL" UpdateMethod="UpdateProduct"> <DeleteParameters> <asp:Parameter Type="Int32" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Type="String" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="String" /> <asp:Parameter Type="Decimal" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Boolean" /> <asp:Parameter Type="Int32" /> </UpdateParameters> <InsertParameters> <asp:Parameter Type="String" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="String" /> <asp:Parameter Type="Decimal" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Boolean" /> </InsertParameters> </asp:ObjectDataSource>