ASP.NET:Работа с типами объектов в качестве параметров при обновлении в ObjectDataSource
-
23-08-2019 - |
Вопрос
Как вы, ребята, обновляете, скажем, например, FormView с исходным кодом ObjectDataSource.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>
Учитывая, что метод Update в классе ProductsBLL принимает объект Product в качестве параметра.Теперь, прежде чем произойдет обновление, я хочу добавить пользовательские данные в параметр Product.Как я могу это сделать?
Решение
Я не уверен точно, в чем заключается ваш вопрос (вам нужно быть более конкретным), но общий ход выглядит следующим образом:
Ваш GridView связан с ObjectDataSource .
Ваш ObjectDataSource связан с уровнем бизнес-логики через
TypeName
property - это класс, который будет создан для выполнения операций с данными.(назовите этоProductsBLL
например).Он также использует
DataObjectTypeName
свойство, которое является типом объекта, извлекаемого / обновляемого / удаляемого BLL.(сказать,Product
)Кроме того, он определяет методы в BLL для вызова при каждом вызове действия (
UpdateMethod
,SelectMethod
, и т.д.) (скажем,ProductsBLL.UpdateProducts
,ProductsBLL.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
)
И так далее.
Другие советы
В событии обновления ObjectDataSource проверьте e.Коллекция InputParameters, ваш объект Products должен храниться в e.InputParameters[0].