2

你们是如何更新的,比如说一个带有 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 参数添加一个自定义数据。我怎样才能做到这一点?

4

2 回答 2

4

我不确定您的问题到底是什么(您需要更具体),但一般流程如下:

  • 您的 GridView 链接到 ObjectDataSource。

  • 您的 ObjectDataSource 通过TypeName属性链接到 Biz Logic 层 - 这是将被实例化以执行数据操作的类。ProductsBLL(例如调用它)。

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

  • 此外,它指定了在调用动作时调用的 BLL 中的方法(UpdateMethodSelectMethod等)(例如ProductsBLL.UpdateProductsProductsBLL.DeleteProducts

  • 然后,您的 BLL 对象对从 ObjectDataSource 接收的数据执行自定义操作,例如验证逻辑,并调用您的 Datalayer 以从数据库执行实际更新/删除。(比如说,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 可能看起来像的地方:

public int UpdateProduct
  (
    string productID,
    string productName,
    int productQty,
    float productPrice
    )

等等。

于 2009-05-21T09:10:17.580 回答
2

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

于 2009-06-18T15:41:59.160 回答