GridView avec ObjectDatasource UpdateMethod
J'ai un ASP.NET WebForms page contenant un ASPxGridView
et un ObjectDataSource
:
<dx:ASPxGridView ID="gvEmployees" runat="server"
AutoGenerateColumns="False" DataSourceID="objDsEmployees"
KeyFieldName="EmployeeId">
<Columns>
<dx:GridViewCommandColumn VisibleIndex="0">
<EditButton Visible="True" />
</dx:GridViewCommandColumn>
<dx:GridViewDataTextColumn FieldName="EmployeeId" VisibleIndex="1" />
<dx:GridViewDataTextColumn FieldName="Name" VisibleIndex="2" />
<dx:GridViewDataTextColumn FieldName="Email" VisibleIndex="3" />
<dx:GridViewDataTextColumn FieldName="Telephone" VisibleIndex="5" />
</Columns>
</dx:ASPxGridView>
<asp:ObjectDataSource ID="objDsEmployees"
runat="server"
ConflictDetection="CompareAllValues"
DataObjectTypeName="MySite.Data.Models.Employee"
DeleteMethod="Delete"
OldValuesParameterFormatString="original{0}"
InsertMethod="Insert"
SelectMethod="GetAll"
TypeName="MySite.Services.EmployeeService"
UpdateMethod="Update" />
L'Employé modèle contient les propriétés suivantes:
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public string Email { get;
public string Password { get; set; }
public string Telephone { get; set; }
}
La ObjectDataSource
appelle la Update
méthode de la couche service:
public void Update(Employee employee, Employee originalEmployee)
{
_db.Employees.Attach(originalEmployee);
_db.Entry(originalEmployee).CurrentValues.SetValues(employee);
_db.SaveChanges();
}
Lorsque le Update
méthode est appelée, les paramètres employee
et originalEmployee
ne contiennent que les propriétés utilisées en tant que colonnes dans la ASPxGridView
et les autres propriétés (Password
par exemple) sont nuls.
Est-il une manière que je peux préserver ces valeurs quelque part?
En passant, j'utilise Entity Framework pour l'accès aux données et de DevExpress pour le contrôle GridView.
OriginalL'auteur Henk Mollema | 2013-06-17
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également résoudre ce problème en définissant
ConflictDetection="CompareAllValues"
dans leObjectDataSource
:Puis dans le
Update
méthode dansEmployeeService
, nous allons chercher l'origine employé d'abord par son id, puis nous fusionner cette origine employé avec la mise à jour de l'employé. Cela permet de s'assurer que pas de mise à jour des propriétés ne devient pas nul mais il faut de la un appel supplémentaire à la base de données:OriginalL'auteur Henk Mollema
J'ai résolu ce problème en changeant la
ObjectDataSource
:Et la
Update
méthode de la couche service:D'autres solutions sont, cependant, plus que la bienvenue!
OriginalL'auteur Henk Mollema