J'utilise un contrôle FormView pour modifier un enregistrement extrait à l'aide d'un LinqDataSource. Essentiellement, le balisage pour la FormView et la source de données ressemble à ceci:Utilisation d'un formulaire avec LINQ
<asp:FormView ID="RuleInstancePropertiesFormView" runat="server" DataKeyNames="RuleInstanceId"
DataSourceID="RuleInstanceDataSource" DefaultMode="Edit" Visible="false"
CssClass="PropertiesTable">
<EditItemTemplate>
<asp:Label ID="RuleInstanceId" runat="server" Text='<%# Eval("RuleInstanceId") %>' />
<telerik:RadTextBox ID="RuleInstanceNameTextBox"
runat="server"
Text='<%# Bind("Rule.Name") %>' />
<telerik:RadTextBox ID="LimitIndexTextBox"
runat="server"
Text='<%# Bind("LimitIndex") %>' />
</EditItemTemplate>
</asp:FormView>
<asp:LinqDataSource ID="RuleInstanceDataSource" runat="server"
ContextTypeName="Questionnaire.QuestionnairesDataContext"
TableName="RuleInstances" EnableUpdate="true">
</asp:LinqDataSource>
Le disque que je suis l'édition a une référence clé étrangère à une autre table, à savoir la table « Règle ». Dans FormView, j'ai besoin d'éditer des champs dans cette table de clé étrangère (j'ai une liaison au champ Rule.Name dans le code ci-dessus).
Lorsque j'essaie d'enregistrer mes modifications, le champ local (LimitIndex) est enregistré correctement dans la base de données, mais le champ étranger (Rule.Name) ne l'est pas. Je suis un peu perplexe à ce sujet, car FormView récupère correctement la valeur actuelle de Rule.Name, mais refuse de le reconduire à l'objet LINQ.
J'espère que tout le monde peut aider, merci :)
Sinon, si je pouvais spécifier un objet de projection personnalisé à utiliser dans ma requête LINQ, alors je pourrais spécifier ma liaison de données entre cet objet de projection et mon objet Rule (avec des références de tables étrangères) Il semble juste que LinqDataSource ne permet pas d'utiliser des requêtes de sélection personnalisées si elle doit également supporter les mises à jour automatiques :(. –