datagridview de liaison à l'entité qui n'est pas la mise à jour de la base de données
Je suis le remplissage d'une grille à partir d'une entité de l'objet et c'est l'affichage des données de l'amende. Quand je fais des modifications et les enregistrer en arrière, rien n'est à jour.
Voici mon code:
Dans ma charge de l'événement:
var query = from c in _entities.PaymentTypes
where c.CorporationId == _currentcorp.CorporationId
select
new DataBindingProjection
{
PaymentTypeId = c.PaymentTypeId,
CorporationId = c.CorporationId,
TokenId = c.TokenId,
IsActive = c.IsActive,
Description = c.Description,
CashChargeCodeType = c.CashChargeCodeType,
SortOrder = c.SortOrder,
ExcludeCreditCode = c.ExcludeCreditCodes,
IsUpdated = c.IsUpdated,
IsAdded = c.IsAdded,
ClearUpdatedAndAdded = c.ClearUpdateAndAdded
};
dataGridView_PaymentTypes.DataSource = query.ToList();
Ma classe:
private class DataBindingProjection
{
public Guid PaymentTypeId { get; set; }
public Guid CorporationId { get; set; }
public Guid TokenId { get; set; }
public bool IsActive { get; set; }
public string Description { get; set; }
public int CashChargeCodeType { get; set; }
public int SortOrder { get; set; }
public int ExcludeCreditCode { get; set; }
public bool IsUpdated { get; set; }
public bool IsAdded { get; set; }
public bool ClearUpdatedAndAdded { get; set; }
}
Dans le bouton pour enregistrer les modifications:
private void button_SaveChanges2_Click(object sender, EventArgs e)
{
button_SaveChanges2.Enabled = false;
_entities.SaveChanges();
timer1.Enabled = true;
button_SaveChanges2.Enabled = true;
}
Ce que je fais mal?
En réponse à bmused:
Défini au niveau de la classe:
private SuburbanPortalEntities _entities;
défini à ma charge:
var bs = new BindingSource();
_entities.PaymentTypes.Where(x => x.CorporationId == _currentcorp.CorporationId).Load;
bs.DataSource = _entities.PaymentTypes.Local.ToBindingList();
dataGridView_PaymentTypes.DataSource = bs;
C'est montrer qu'il ne peut charger le symbole de Charge et Local:
Pourquoi êtes-vous projetant vers un autre type qui a exactement les mêmes propriétés de votre entité?
tests, j'ai essayé plusieurs idées différentes et j'ai fini avec ça. Accordé, il n'est pas nécessaire, mais je l'ai laissé.
devrait pas
oui... mais il n'était pas de trouver de charge avec ou sans eux, de sorte que le () n'a pas d'importance si il ne le trouve pas.
tests, j'ai essayé plusieurs idées différentes et j'ai fini avec ça. Accordé, il n'est pas nécessaire, mais je l'ai laissé.
devrait pas
Load
être Load()
?oui... mais il n'était pas de trouver de charge avec ou sans eux, de sorte que le () n'a pas d'importance si il ne le trouve pas.
OriginalL'auteur ErocM | 2013-05-10
Vous devez vous connecter pour publier un commentaire.
Les deux sens de la liaison de données avec les Winforms et Entity Framework peut être atteint par la création d'un
IBindinglist
de laDbContext
Local
ObservableCollection<T>
et de le définir commeDataSource
d'unBindingSource
. Exemple:quelle est la version de l'Entity Framework? Le dessus doit travailler pour EF 4.1+, car il utilise la
DbContext
API pas le vieuxObjectContext
API. Vérifiez également que vous avez de référenceSystem.Data.Entity
.v4.0.30319 où et comment obtenez-vous 4.1+ ? Je suis à l'aide .net 4.0 complet.
Vous pouvez obtenir la dernière version de package nuget msdn.microsoft.com/en-us/data/ee712906
ok obtenu ef 5.0, et a été en mesure de charger l'extension de Charge, mais il n'est pas de trouver un Local. Toutes les suggestions?
OriginalL'auteur
Vous modifiez les propriétés de la projection de la copie de l'entité, l'entité elle-même reste inchangé. C'est pourquoi la sauvegarde ne fonctionne pas - l'entité reste inchangé.
Vous avez besoin de lier les entités lui-même comme source de données pour la grille, ou de mettre à jour la propriété de l'entité correspondante lorsque vous la mise à jour de la propriété de l'instance de projection.
OriginalL'auteur Денис Евдокимов
.Load()
et.Local
sera visible lors de l'utilisation de référence:OriginalL'auteur Vladimir Vukanac
De la création de la nouvelle DataBindingProjection() nous sommes donc en supposant que c'est une classe qui est contrôlé par votre contexte droit?
En supposant que, ce que je vois qui est manquant dans votre code pour vous de passer à la nouvelle instance de DataBindingProjection à votre DbContext(en cas d'utilisation 4.2+ ou à ObjectContext si vous utilisez des versions plus anciennes, je vous recommande de migrer à la version 5.0)
Vous devez Joindre() les entités créées pour le contexte avant d'appeler la SaveChanges(), je ne vois pas cela dans votre code.
La est le moyen pour vous de créer de nouveaux enregistrements à la base de données. Si vous souhaitez modifier les enregistrements qui sont à la base de données, vous ne devez pas utiliser l'approche de Linq où vous créez un nouvel objet, vous devez appeler l'objet lui-même, de sorte qu'il peut avoir de l'EF procurations et être suivi par le ChangeTracker de EF.
Pour moi, il semble que vous avez une nouvelle classe qui n'est pas suivi par EF.....
Si vous avez fait quelque chose comme cela, alors il devrait fonctionner (im en supposant une propriété nommée Projection d'être dans vos entités, juste pour un exemple) :
Si vous n'avez pas cela, alors vous devriez faire quelque chose comme ceci:
Après cela, vous serez en mesure de l'enregistrer dans la base de données.
OriginalL'auteur Gabriel Vonlanten C. Lopes
Prendre un coup d'oeil à mon post à propos de la liaison d'un datagridView, la méthode fonctionne très bien et son très utile: Meilleure approche pour lier un datagridview à la base de données de l'entité/s
OriginalL'auteur Alejandro del Río