2010-07-24 1 views
2

Bonjour,Problème lors de la mise à jour des résultats LINQ avec un type anonyme ... en lecture seule?

J'apprends LINQ et j'ai rencontré un problème. J'ai créé une requête simple contre le db northwind, et je façonne les champs qui devraient être retournés. Le problème est après exécution, je ne peux pas modifier les champs dans mon AspxGridView.

<dxwgv:ASPxGridView ID="ASPxGridView1" runat="server" 
    AutoGenerateColumns="False" KeyFieldName="CategoryID"> 
    <Columns> 
     <dxwgv:GridViewCommandColumn VisibleIndex="0"> 
      <EditButton Visible="True"> 
      </EditButton> 
      <NewButton Visible="True"> 
      </NewButton> 
      <DeleteButton Visible="True"> 
      </DeleteButton> 
     </dxwgv:GridViewCommandColumn> 
     <dxwgv:GridViewDataTextColumn Caption="CategoryID" FieldName="CategoryID" 
      VisibleIndex="1"> 
     </dxwgv:GridViewDataTextColumn> 
     <dxwgv:GridViewDataTextColumn Caption="CategoryName" FieldName="CategoryName" 
      VisibleIndex="2"> 
     </dxwgv:GridViewDataTextColumn> 
     <dxwgv:GridViewDataTextColumn Caption="Description" FieldName="Description" 
      VisibleIndex="3"> 
     </dxwgv:GridViewDataTextColumn> 
    </Columns> 
</dxwgv:ASPxGridView> 

C syntaxe #:

protected void Page_Load(object sender, EventArgs e) 
{ 
    NorthwindDataContext db = new NorthwindDataContext(); 
    var r = db.Categories 
     .Select(p=>new {p.CategoryID,p.CategoryName,p.Description}); 
    ASPxGridView1.DataSource = r; 
    ASPxGridView1.DataBind(); 
} 

Vous les gars peut dire que c'est le problème pour var de type anonyme .Mais je dois toujours utiliser type.How anonyme pour résoudre ce problème

+1

Vous ne pouvez pas modifier les champs comment? Quel code utilisez-vous pour essayer de modifier les champs? Quelle erreur obtenez vous? – Gabe

+0

Dans l'exemple que vous avez fourni, je vois l'affectation 'var r', mais où' lresult' est-il créé/rempli? En outre, je ne comprends pas ce que vous entendez par "j'ai toujours besoin d'utiliser un type anonyme". Vous devriez être capable d'utiliser tout ce qui supporte 'IEnumerable' pour votre source de données. De plus, avoir ce code nu dans le 'Page_Load' sans vérification de' IsPostback' pourrait être un problème probable, car les données de la grille seraient reconstruites et rebondir à chaque publication, ce qui rendrait la modification impossible. –

+0

désolé pour lresult.après utilisation cela je ne peux pas modifier mes champs. Pourquoi ne pas vous tester – shamim

Répondre

5

Ne pense pas que c'est possible.

Les types anonymes sont des types de classe constitués d'une ou de plusieurs propriétés publiques en lecture seule.

cité de http://msdn.microsoft.com

+0

je sais que.Mais je veux savoir est-il une solution pour résoudre ce problème.Supposons qu'il y a deux table "Commandes" et "OrdersDetail" de la base de données Northwind.Maintenant, j'ai besoin de sélectionner les deux valeurs de tabil que ce qu'il faut faire. La déclaration de type de liste de travail fonctionne. Comment envoyer une syntaxe .Plz – shamim

+1

Si vous ne voulez pas qu'ils soient en lecture seule, vous ne pouvez pas utiliser TYPES ANONYMES, mais à la place vous avoir à définir vos propres classes. – sgmoore

1

Ce n'est pas possible.

Scott Guthrie il couvert de part 9 of his LINQ to SQL series:

Une caractéristique qui ne sera pas travailler avec des formes personnalisées/projections, cependant, est le soutien de l'édition en ligne. C'est parce que nous faisons une projection personnalisée dans notre événement Selecting, et donc LinqDataSource n'a aucun moyen de savoir en toute sécurité comment mettre à jour un objet entité sous-jacent. Si nous voulons ajouter un support d'édition à GridView avec un type en forme personnalisé, nous souhaitons soit passer à un contrôle ObjectDataSource (où nous pourrions fournir une méthode de méthode Update personnalisée pour gérer les mises à jour), soit demander à l'utilisateur de une nouvelle page lors de l'exécution des mises à jour - et affiche un contrôle DetailsView ou FormView qui a été lié à une entité de produit pour l'édition (et ne pas essayer de faire l'édition en ligne avec la grille).

+0

je ne veux pas utiliser la source de données.Je veux remplir la fin de la grille sur C#. Que faire .votre url donnée décrivez comment travailler gridview en utilisant DataSource.Will u plz m'aider à remplir la grille en utilisant C# – shamim

Questions connexes