Question

J'utilise un FormView avec un ObjectDataSource. Lorsque le bouton de sauvegarde est cliqué, je souhaite modifier l'objet lié aux données avant qu'il ne soit défini sur la méthode ObjectDataSources Update.

J'ai essayé l'événement Updating de FormView ainsi que l'événement Updating de la source de données objet, mais je ne vois pas comment accéder à l'objet lié aux données. FormView.DataItem est null dans ces événements.

Ou, en d'autres termes, j'aimerais intercepter et modifier l'objet DataItem avant qu'il ne soit transmis à ObjectDataSource UpdateMethod.

Pour expliquer un peu plus en détail la raison pour laquelle je souhaite effectuer cette opération, certaines valeurs du formulaire ne peuvent pas être associées à la fonctionnalité de génération. L'un des contrôles est la liste des cases à cocher. J'utilise l'événement DataBinding pour renseigner les contrôles, mais maintenant, j'ai également besoin d'un moyen de mettre à jour mon objet pour refléter les valeurs du formulaire. Il existe également d'autres contrôles avec des situations similaires.

Était-ce utile?

La solution

Pourquoi n'écrivez-vous pas simplement votre propre objet métier (également appelé ObjectDataSource) et n'emballez-vous pas l'objet ObjectDataSource d'origine? Vous pouvez alors intercepter ce que vous voulez et le modifier en cours de route vers la méthode Save de l'objet ObjectDataSource d'origine.

Autres conseils

Je sais que c’est une vieille question, mais j’ai eu le même problème et j’ai trouvé la réponse que je pense que Bob cherche.

La solution consiste à utiliser l'événement de mise à jour ObjectDataSource sur le formulaire Web. L'événement Updating inclut l'objet ObjectDataSourceMethodEventArgs en tant que paramètre. La classe ObjectDataSourceMethodEventArgs inclut une propriété nommée "InputParameters", que vous pouvez utiliser pour accéder à l'objet de données et modifier le contenu avant la mise à jour. Vous devez d'abord convertir l'objet InputParameters en un type OrderedDictionary (l'espace de nom complet est System.Collections.Specialized.OrderedDictionary)

Cela ressemble à quelque chose comme ça:

protected void myObjectDataSource_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
    OrderedDictionary parameters = (OrderedDictionary)e.InputParameters;
    MyDataObject updatedData = (MyDataObject)parameters[0];
    DropDownList myDropDown = (DropDownList)FormView1.FindControl("myDropDown")
    updatedData.SomeDataValue = myDropDown.SelectedValue;
}

DataItem est uniquement disponible lorsque DataBinding.
Les données sont ensuite liées aux contrôles à l'intérieur de votre FormView.
Utilisez myFormView.FindControl (id de chaîne) pour accéder aux valeurs liées avant la mise à jour.

Si la liaison de données bidirectionnelle ne fonctionne pas pour vous, instanciez votre objet, remplissez manuellement les propriétés, puis mettez à jour ou validez les modifications.

Puisque vous êtes dans l'événement Updating, FormView.DataItem est null car la liaison de données n'a pas encore eu lieu. Vous devez accéder aux données via le contrôle de formulaire contenant vos données d’intérêt.

Essayez d'appliquer votre modification de données lors de l'événement OnDataBinding du contrôle correspondant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top