你们如何更新让我们说例如一个带有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参数。我怎么能这样做?
答案 0 :(得分:4)
我不确定你的问题究竟是什么(你需要更具体),但总体流程如下:
您的GridView链接到ObjectDataSource。
您的ObjectDataSource通过TypeName
属性链接到Biz Logic层 - 这是将实例化用于执行数据操作的类。 (例如,将其称为ProductsBLL
。
它还使用DataObjectTypeName
属性,该属性是BLL检索/更新/删除的对象类型。 (例如,Product
)
此外,它还指定了在调用操作时调用的BLL中的方法(UpdateMethod
,SelectMethod
等)(例如,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]中。