ASP.NET: Lidando com tipos de objetos como parâmetros ao atualizar no ObjectDataSource
-
23-08-2019 - |
Pergunta
Como vocês digamos atualização Vamos por exemplo, um FormView com uma fonte ObjectDataSource. O DataObjectTypeName é uma classe que já marcado com um atributo DataObject. Agora, eu quero personalizar o processo de atualização e adicionar alguns dados personalizados para o parâmetro. O que precisamos para fazê-lo?
Exemplo: Eu tenho uma classe BLL que vamos chamá-lo "ProductsBLL" e uma classe de dados "Produto".
Eu declaro o seguinte controle 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>
Tendo em conta que o método Update na classe ProductsBLL aceita um objeto de Produtos como um parâmetro. Agora, antes que a atualização ocorre, eu quero adicionar dados personalizados para o parâmetro de Produto. Como posso fazer isso?
Solução
Eu não sei exatamente o que sua pergunta é (você precisa para ser mais específico), mas o fluxo geral é o seguinte:
-
O seu GridView está vinculado a um ObjectDataSource.
-
O seu ObjectDataSource está ligada a uma camada Biz Logic através da propriedade
TypeName
- Esta é a classe que será instanciado para a realização de operações de dados. (Chamemos-lheProductsBLL
por exemplo). -
Ele também usa uma propriedade
DataObjectTypeName
que é o tipo de objeto que está sendo recuperada / atualizado / excluído pelo BLL. (Digamos,Product
) -
Além disso, especifica os métodos na BLL para chamar sempre que uma ação é invocado (
UpdateMethod
,SelectMethod
, etc.) (digamos,ProductsBLL.UpdateProducts
,ProductsBLL.DeleteProducts
) -
Seu objeto BLL em seguida, executa operações personalizadas, tais como lógica de validação dos dados recebidos do ObjectDataSource e chama seu DataLayer para executar o real updation / exclusão do banco de dados. (Digamos,
ProductsDataLayer.UpdateProduct()
)
Se precisar de mais informações, por favor edite sua pergunta para ser mais específico.
Editar (depois de editar a pergunta original):
Modificar o parâmetro Product
antes atualização seria tão simples como:
// 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);
}
onde o ProductDL.UpdateProduct
pode olhar como:
public int UpdateProduct
(
string productID,
string productName,
int productQty,
float productPrice
)
E, assim por diante.
Outras dicas
No caso ObjectDataSource atualização, verifique a coleção e.InputParameters, seu objeto de produtos devem ser armazenados em e.InputParameters [0].