ASP.NET: vengono trattati i tipi di oggetti come parametri durante l'aggiornamento in ObjectDataSource
-
23-08-2019 - |
Domanda
Come fate a aggiornare diciamo per esempio un FormView con una fonte di ObjectDataSource. Il DataObjectTypeName è una classe che ho già segnato con un attributo DataObject. Ora, voglio personalizzare il processo di aggiornamento e aggiungere alcuni dati personalizzati al parametro. Che cosa abbiamo bisogno di farlo?
Esempio: Ho una classe BLL che chiamiamolo "ProductsBLL" e un "prodotto" classe di dati.
dichiaro il seguente controllo 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>
Dato che il metodo di aggiornamento della classe ProductsBLL accetta un oggetto prodotto come parametro. Ora, prima che l'aggiornamento avvenga, voglio aggiungere dati personalizzati al parametro del prodotto. Come posso fare?
Soluzione
Non sono sicuro di quello che la tua domanda è (è necessario per essere più precisi), ma il flusso generale è la seguente:
-
Il GridView è legata ad un ObjectDataSource.
-
L'ObjectDataSource è legata a un livello logico Biz tramite la proprietà
TypeName
- Questa è la classe che verrà creata un'istanza per l'esecuzione di operazioni sui dati. (Lo chiamanoProductsBLL
per esempio). -
Si utilizza anche una proprietà
DataObjectTypeName
che è il tipo di oggetto che viene recuperato / aggiornati / cancellati dal BLL. (Diciamo,Product
) -
Inoltre, specifica i metodi nella BLL chiamare ogniqualvolta un'azione viene richiamato (
UpdateMethod
,SelectMethod
, ecc) (per esempio,ProductsBLL.UpdateProducts
,ProductsBLL.DeleteProducts
) -
Il vostro BLL poi esegue le operazioni doganali, come logica di convalida sui dati ricevuti dalla ObjectDataSource e chiama il tuo dataLayer per eseguire l'attuale updation / cancellazione dal database. (Diciamo,
ProductsDataLayer.UpdateProduct()
)
Se avete bisogno di ulteriori informazioni, si prega di modificare la tua domanda per essere più precisi.
Modifica (dopo modifica alla domanda iniziale):
La modifica del parametro di Product
prima di aggiornamento dovrebbe essere semplice come:
// 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);
}
dove il ProductDL.UpdateProduct
potrebbe aspetto:
public int UpdateProduct
(
string productID,
string productName,
int productQty,
float productPrice
)
E, così via.
Altri suggerimenti
In caso di aggiornamento ObjectDataSource, controllare la raccolta e.InputParameters, i vostri prodotti oggetto deve essere conservato in e.InputParameters [0].