ASP.NET:在ObjectDataSource中更新时将对象类型作为参数进行处理

时间:2009-05-21 08:53:14

标签: asp.net objectdatasource formview

你们如何更新让我们说例如一个带有ObjectDataSource源的FormView。 DataObjectTypeName是我已经使用DataObject属性标记的类。现在,我想自定义更新过程并向参数添加一些自定义数据。我们需要做什么?

实施例: 我有一个BLL类,我们称之为“ProductsBLL”和数据类“Product”。

我声明了以下ObjectDataSource控件:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
DataObjectTypeName="Product" OldValuesParameterFormatString="original_{0}"
SelectMethod="GetProduct" TypeName="Assembly.ProductsBLL" 
UpdateMethod="UpdateProduct">
  <UpdateParameters>
    <asp:Parameter Name="product" Type="Object" />
  </UpdateParameters>
  <SelectParameters>
    <asp:QueryStringParameter Name="productID" QueryStringField="ProdID" Type="Int32" />
  </SelectParameters>
</asp:ObjectDataSource>

鉴于ProductsBLL类中的Update方法接受Product对象作为参数。现在,在更新发生之前,我想将自定义数据添加到Product参数。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

我不确定你的问题究竟是什么(你需要更具体),但总体流程如下:

  • 您的GridView链接到ObjectDataSource。

  • 您的ObjectDataSource通过TypeName属性链接到Biz Logic层 - 这是将实例化用于执行数据操作的类。 (例如,将其称为ProductsBLL

  • 它还使用DataObjectTypeName属性,该属性是BLL检索/更新/删除的对象类型。 (例如,Product

  • 此外,它还指定了在调用操作时调用的BLL中的方法(UpdateMethodSelectMethod等)(例如,ProductsBLL.UpdateProducts,{{1 }})

  • 然后,您的BLL对象对从ObjectDataSource接收的数据执行自定义操作(如验证逻辑),并调用Datalayer以执行数据库中的实际更新/删除。 (例如,ProductsBLL.DeleteProducts

如果您需要更多信息,请将您的问题编辑为更具体。

修改(编辑原始问题后):


在更新之前修改ProductsDataLayer.UpdateProduct()参数将非常简单:

Product

// In Biz Logic Layer. public int UpdateProduct(Product p) { // Modify the ProductName and the Price properties of this Product. p.ProductName = "Product " + p.ProductName; p.Price = 0.95 * p.Price; // Call DataLayer. return ProductDL.UpdateProduct(p.ID, p.ProductName, p.Quantity, p.Price); } 可能的位置:

ProductDL.UpdateProduct

等等。

答案 1 :(得分:2)

在ObjectDataSource更新事件中,检查e.InputParameters集合,您的Products对象应存储在e.InputParameters [0]中。