2010-02-23 3 views
1

Voici la configurationSupprimer un paramètre de DetailsView ItemUpdating

  • J'ai un DetailsView dont DataSource est un ObjectDataSource.
  • Le ObjectDataSource a deux méthodes, sélectionner et mettre à jour, qui sont des procédures stockées définies dans un TableAdapter. La procédure stockée Select prend 1 paramètre - l'ID d'enregistrement - et renvoie les champs renseignés dans DetailsView.
  • La procédure stockée Update prend trois paramètres: l'ID d'enregistrement et deux champs de données.

Le processus de sélection fonctionne correctement.

Cependant, lorsque le Je soumets la mise à jour, je reçois l'erreur suivante:

ObjectDataSource could not find a non-generic method Update that has parameters: [all 21 table columns]

Je suis en train de seulement passer les (3) les champs nécessaires à la Update procédure stockée, mais le DetailsView tente apparemment mettre à jour en utilisant tous les champs reçus de Select.

Je sais que je peux accéder à la collection NewValues de DetailsViewUpdateEventArgs, mais je ne vois pas une façon de supprimer l'un des paramètres afin qu'ils correspondent à la définition de la procédure stockée, le TableAdapter et le ObjectDataSource.

Des idées?

Répondre

0

Peut-être this tutorial peut fournir un aperçu. Tant que vous spécifiez votre méthode de mise à jour et vos paramètres de mise à jour dans votre source de données, cela devrait fonctionner correctement.

+0

D'accord, nous allons dans la bonne direction. Dans le didacticiel auquel Aaron s'est connecté, j'ai trouvé ceci: "Pour nous assurer que ObjectDataSource appelle la surcharge [correcte] UpdateProduct ... nous devons restreindre la GridView à des champs éditables pour seulement le ProductName et le UnitPrice. accompli en supprimant les autres BoundFields et CheckBoxFields, en définissant la propriété ReadOnly des autres champs sur true, ou par une combinaison des deux. – dneaster3

+0

Maintenant le problème est que tous les champs dans mon DetailsView sont TemplateFields, et ils n'ont aucune propriété ReadOnly. Supprimer simplement le EditItemTemplate n'a pas fonctionné, et je ne peux pas, dans ce cas, supprimer complètement les champs pendant DetailsViewMode.Edit. Donc, même si j'ai une meilleure compréhension du processus, je n'ai toujours pas convaincu .NET d'utiliser la bonne méthode de mise à jour. – dneaster3

0

J'ai pu contourner le problème pour l'instant en supprimant simplement les valeurs inutiles de la collection NewValues dans le DetailsViewUpdateEventArgs. Toutefois, ce n'est pas optimal, car j'ai ajouté un autre point d'échec si des modifications ont été apportées à la procédure stockée ou au formulaire.

Je voudrais toujours savoir si un TemplateField peut être réglé à ReadOnly comme un BoundField peut (voir les commentaires ci-dessous la réponse d'Aaron).

Questions connexes