Erreur : LinqDataSource 'LdsDemande' ne prend pas en charge la propriété Select lorsque les opérations Delete, Insert ou Update sont activées

Le
Gilbert Tordeur
Bonjour.

Que veut dire ce message d'erreur ? Je ne vois pas du tout dans quel sens
travailler.

Contexte : VB2008, page ASP.

Il s'agit d'afficher une grille à partir d'une base SQL et d'une requête
Linq, pour permettre la modification de certains champs. Le programme est
basique pour l'instant. Le code vb est vide, tout est dans la page aspx. Son
contenu, ainsi que le message d'erreur, sont listés ci-dessous.

Le programme affiche bien la grille. Je clique sur le lien «Modifier» d'une
ligne. La grille est réaffichée avec des TextBox pour la ligne concernée. Je
modifie la valeur d'un champ, puis je clique sur «Mettre à jour» et là
apparaît le message d'erreur. La table SQL n'est pas mise à jour. (Si je
clique sur «Annuler», tout se passe bien.)

Merci d'avance pour votre aide,
Gilbert.

=

Option Strict On
Partial Class FinCau025
End Class

=

<%@ Page Language="VB" MasterPageFile="~/FinCauM00.master"
AutoEventWireup="false"
CodeFile="FinCau025.aspx.vb" Inherits="FinCau025" Title="Menu Gestion
des offres"
Culture="fr-FR" MaintainScrollPositionOnPostback="false"
EnableViewState="False" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
<h1>Liste des demandes de caution bancaire</h1>
<p>
<asp:GridView ID="GvDemande" runat="server"
AutoGenerateColumns="False"
AllowPaging="True" AllowSorting="True" DataSourceID="LdsDemande"
AutoGenerateEditButton="True">
<Columns>
<asp:BoundField HeaderText="N°" DataField="DcbNumDemande" />
<asp:BoundField HeaderText="N°" DataField="DcbTxtPourCompte1" />
<asp:BoundField HeaderText="Bénéficiaire"
DataField="DcbNomBeneficiaire" />
<asp:BoundField HeaderText="Montant" DataField="DcbMntCaution"
DataFormatString="{0:c}" >
<HeaderStyle HorizontalAlign="Right" />
<ItemStyle HorizontalAlign="Right" />
</asp:BoundField>
<asp:BoundField HeaderText="Demande" DataField="DcbDatDemande"
DataFormatString="{0:d}" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField HeaderText="Validité" DataField="DcbDatValidite"
DataFormatString="{0:d}" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField HeaderText="Envoi banque"
DataField="DcbDatEnvoiBanque"
DataFormatString="{0:d}" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField HeaderText="Retour banque"
DataField="DcbDatReceptionBanque"
DataFormatString="{0:d}" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField HeaderText="État" DataField="DcbCodAvancement" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
</Columns>
</asp:GridView>
</p>
<asp:LinqDataSource ID="LdsDemande" runat="server"
ContextTypeName="FinanceDataContext" OrderBy="DcbNumDemande desc"
Select="new (DcbNumDemande, DcbCodAvancement,
DcbCodDeviseMntCaution, DcbDatDemande, DcbDatEnvoiBanque,
DcbDatReceptionBanque, DcbDatValidite, DcbNomBeneficiaire,
DcbTxtPourCompte1, DcbMntCaution)"
TableName="CauDemandeCaution" EnableUpdate="True"
EnableViewState="False"
StoreOriginalValuesInViewState="False">
</asp:LinqDataSource>
</asp:Content>



Erreur du serveur dans l'application '/FinCau000'.
--

LinqDataSource 'LdsDemande' ne prend pas en charge la propriété Select
lorsque les opérations Delete, Insert ou Update sont activées.
Description : Une exception non gérée s'est produite au moment de
l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour
plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.InvalidOperationException: LinqDataSource
'LdsDemande' ne prend pas en charge la propriété Select lorsque les
opérations Delete, Insert ou Update sont activées.

Erreur source:

Une exception non gérée s'est produite lors de l'exécution de la demande Web
actuelle. Les informations relatives à l'origine et l'emplacement de
l'exception peuvent être identifiées en utilisant la trace de la pile
d'exception ci-dessous.

Trace de la pile:


[InvalidOperationException: LinqDataSource 'LdsDemande' ne prend pas en
charge la propriété Select lorsque les opérations Delete, Insert ou Update
sont activées.]
System.Web.UI.WebControls.LinqDataSourceView.ValidateEditSupported()
+450365
System.Web.UI.WebControls.LinqDataSourceView.ValidateUpdateSupported(IDictionary
keys, IDictionary values, IDictionary oldValues) +30
System.Web.UI.WebControls.LinqDataSourceView.ExecuteUpdate(IDictionary
keys, IDictionary values, IDictionary oldValues) +56
System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values,
IDictionary oldValues, DataSourceViewOperationCallback callback) +92
System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32
rowIndex, Boolean causesValidation) +907
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean
causesValidation, String validationGroup) +704
System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs
e) +95
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source,
EventArgs e) +123
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +118
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String
eventArgument) +135
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565




--
Informations sur la version : Version Microsoft .NET Framework
:2.0.50727.3053; Version ASP.NET :2.0.50727.3053
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jérémy Jeanson
Le #17703131
je crois que le souci viens du fait que tu ais choisi les éléments de
ton objet plutôt que de prendre l'objet lui même...

Pour faire plus simple : vu que ton select utilise un type anonyme, tu
ne peux pas faire d'update et d'insert.

Si tu veux faire l'ensemble des opération de selection, insertion et
mise à jour ta source de données doit être sous la forme

<asp:LinqDataSource ID="LdsDemande" runat="server"
ContextTypeName="FinanceDataContext" OrderBy="DcbNumDemande desc"

TableName="CauDemandeCaution" EnableUpdate="True"
EnableViewState="False"
StoreOriginalValuesInViewState="False">
</asp:LinqDataSource>

donc sans le select
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Gilbert Tordeur
Le #17704351
Jérémy,

Merci pour ta réponse. Le message d'erreur a changé :(

Voici le nouveau code et le nouveau message d'erreur, cela t'inspire-t-il ?

Est-ce que par malheur il serait impossible d'activer la mise à jour sans
utiliser le ViewState (que je désactive systématiquement pour des raisons de
performances sur le WAN) ?

Gilbert

=============
<%@ Page Language="VB" MasterPageFile="~/FinCauM00.master"
AutoEventWireup="false"
CodeFile="FinCau025.aspx.vb" Inherits="FinCau025" Title="Menu Gestion
des offres"
Culture="fr-FR" MaintainScrollPositionOnPostback="false"
EnableViewState="False" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
<h1>Liste des demandes de caution bancaire</h1>
<p>État : 1 = Crée, 2 = Validé, 3 = Signé, 4 = Envoyé, 5 = En cours, 6 =
Levé</p>
<p>
<asp:GridView ID="GvDemande" runat="server"
AutoGenerateColumns="False"
AllowPaging="True" AllowSorting="True" DataSourceID="LdsDemande"
AutoGenerateEditButton="True">
<Columns>
<asp:BoundField HeaderText="N°" DataField="DcbNumDemande" />
<asp:BoundField HeaderText="N°" DataField="DcbTxtPourCompte1" />
<asp:BoundField HeaderText="Bénéficiaire"
DataField="DcbNomBeneficiaire" />
<asp:BoundField HeaderText="Montant" DataField="DcbMntCaution"
DataFormatString="{0:c}" >
<HeaderStyle HorizontalAlign="Right" />
<ItemStyle HorizontalAlign="Right" />
</asp:BoundField>
<asp:BoundField HeaderText="Demande" DataField="DcbDatDemande"
DataFormatString="{0:d}" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField HeaderText="Validité" DataField="DcbDatValidite"
DataFormatString="{0:d}" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField HeaderText="Envoi banque"
DataField="DcbDatEnvoiBanque"
DataFormatString="{0:d}" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField HeaderText="Retour banque"
DataField="DcbDatReceptionBanque"
DataFormatString="{0:d}" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField HeaderText="État" DataField="DcbCodAvancement" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
</Columns>
</asp:GridView>
</p>
<asp:LinqDataSource ID="LdsDemande" runat="server"
ContextTypeName="FinanceDataContext" OrderBy="DcbNumDemande desc"
TableName="CauDemandeCaution" EnableUpdate="True"
EnableViewState="False"
StoreOriginalValuesInViewState="False">
</asp:LinqDataSource>
<%-- Select="new (DcbNumDemande, DcbCodAvancement,
DcbCodDeviseMntCaution, DcbDatDemande, DcbDatEnvoiBanque,
DcbDatReceptionBanque, DcbDatValidite, DcbNomBeneficiaire,
DcbTxtPourCompte1, DcbMntCaution)" --%>

</asp:Content>

==============
Erreur du serveur dans l'application '/FinCau000'.
--------------------------------------------------------------------------------

La valeur du membre 'DcbNumDemande' d'un objet de type 'CauDemandeCaution' a
changé.
Un membre définissant l'identité de l'objet ne peut pas être modifié.
Si possible, ajoutez un nouvel objet avec une nouvelle identité, et
supprimez l'objet existant à la place.
Description : Une exception non gérée s'est produite au moment de
l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour
plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.InvalidOperationException: La valeur du
membre 'DcbNumDemande' d'un objet de type 'CauDemandeCaution' a changé.
Un membre définissant l'identité de l'objet ne peut pas être modifié.
Si possible, ajoutez un nouvel objet avec une nouvelle identité, et
supprimez l'objet existant à la place.

Erreur source:

Une exception non gérée s'est produite lors de l'exécution de la demande Web
actuelle. Les informations relatives à l'origine et l'emplacement de
l'exception peuvent être identifiées en utilisant la trace de la pile
d'exception ci-dessous.

Trace de la pile:


[InvalidOperationException: La valeur du membre 'DcbNumDemande' d'un objet
de type 'CauDemandeCaution' a changé.
Un membre définissant l'identité de l'objet ne peut pas être modifié.
Si possible, ajoutez un nouvel objet avec une nouvelle identité, et
supprimez l'objet existant à la place.]
System.Data.Linq.ChangeProcessor.CheckForInvalidChanges(TrackedObject
tracked) +218
System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
+607
System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) +331
System.Data.Linq.DataContext.SubmitChanges() +19
System.Web.UI.WebControls.LinqToSqlWrapper.SubmitChanges(DataContext
dataContext) +9
System.Web.UI.WebControls.LinqDataSourceView.UpdateDataObject(Object
dataContext, Object table, Object oldDataObject, Object newDataObject) +109
System.Web.UI.WebControls.LinqDataSourceView.ExecuteUpdate(IDictionary
keys, IDictionary values, IDictionary oldValues) +525
System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values,
IDictionary oldValues, DataSourceViewOperationCallback callback) +92
System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32
rowIndex, Boolean causesValidation) +907
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean
causesValidation, String validationGroup) +704
System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs
e) +95
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source,
EventArgs e) +123
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +118
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String
eventArgument) +135
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565




--------------------------------------------------------------------------------
Informations sur la version : Version Microsoft .NET Framework
:2.0.50727.3053; Version ASP.NET :2.0.50727.3053
Jérémy Jeanson
Le #17704631
Euh?? personnelement je ne te conseil pas de faire sauter le viewstate
sur des controls qui te servent à gérer des données, sur le reste je
comprend bien ton approche j'en fais de même.

par contre sur des controles de donnée, je suis un peu tenté de te dire
que c'est là qu'opère la magie du viewstate donc ... enable = true ;)
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Jérémy Jeanson
Le #17704621
Justement les viewstate servent pour les controls de données donc ton
erreur est certainement provoqué par le manque de viewstate car
j'utilise régulièrement ce genre de controls et tout marche bien.

Je suis d'accord avec toi pour les autres controls, mais dans ton cas en
faisant sauter le viewstate je pense que tu vas te compliquer la vie.
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Jérémy Jeanson
Le #17704611
oups j'avais annulé un message de peur de ne pas être clair et je me
rencontre que j'ai un doublon...

pardon pour les admins :(
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
Publicité
Poster une réponse
Anonyme