Question

Eh bien, tout d’abord, désolée pour cette question, elle doit être assez simple pour vous mais je me bats dessus, et j’ai besoin de la faire fonctionner :( Eh bien, j'essaie d'utiliser DataSet sur mon application

et quand je l'ai rendu, j'ai:

The type 'System.Data.DataSet' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Data

dans mon application, System.Data est déjà référencé dans C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Data.dll

et j'utilise aussi mes clauses d'utilisation

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;

Cet ensemble de données est une réponse d'un Webservice. Donc, des idées sur la façon de résoudre ce problème?

PS. Je ne sais pas si cela aide, mais j'utilise nHaml pour rendre mon point de vue

Merci beaucoup

MISE À JOUR:

La seule solution que j'ai trouvée pour l'instant était de passer un DataSet au convertisseur de vue, le DataSet en

.
<List<List<String>>

et passez une boucle dans l'ensemble du DataSet comme ceci

List<List<String>> myList = new List<List<String>>();

foreach (DataRow row in dsTrades.Tables[0].Rows)
{
    List<String> myListColumns = new List<String>();

    for (var index = 0; index < dsTrades.Tables[0].Columns.Count; index ++)
    {
        myListColumns.Add(row[index].ToString());
    }

    myList.Add(myListColumns);
}

// THIS SHOULD BE THE DATASET AND NOW 
// IT'S CONVERTED TO A LIST WITH STRINGS LIST INSIDE
viewModel.Trades = myList; 

return View(viewModel);

En fait, c’est complètement fou, non?

Tout ce travail pourrait être facilement effectué dans la vue si vous utilisiez directement DataSet J'espère que tout le monde pourra m'aider avec un moyen plus simpliste de le faire

Merci :))

UPDATE (SOLUTION)

La réponse de Simon a été vraiment efficace et elle a fonctionné du premier coup après l'ajout d'espaces de noms pour System.Data et System.Xml, mais en même temps, la réponse de Josh présente une façon très agréable et cool de travailler avec DataSets. fonctionne beaucoup mieux et je pense que je vais y aller maintenant.

Merci de votre aide

Était-ce utile?

La solution

essayez d'ajouter une référence explicite à System.Data dans votre configuration nhaml

<?xml version="1.0"?>

<configuration>
...
    <configSections>
            <section name="nhaml" type="NHaml.Configuration.NHamlConfigurationSection, NHaml"/>
    </configSections>
...
<nhaml autoRecompile="true">
            <assemblies>
                    <clear/>
                    ...
                    <add assembly="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
            </assemblies>
            <namespaces>
                    <clear/>
                    ...
                    <add namespace="System.Data"/>
            </namespaces>
    </nhaml>

remplace évidemment "" ... " avec vos autres références et config

Autres conseils

La seule chose à laquelle je puisse penser est que, dans le contexte de la page, la référence System.Data n'est pas visible.

Essayez d’ajouter l’espace de nom dans votre web.config:

<pages>
   <controls />
   <namespaces>
      <add namespace="System.Data"/>
   </namespaces>
</pages>

Je sais que cela ne fait pas vraiment partie de votre question, mais je vous recommanderais de construire une classe contenant des propriétés représentant les champs de votre datatable. Avec Linq, vous pouvez facilement convertir vos lignes en objet de classe et en renvoyer une liste. Voici un code approximatif (et non compilé).

[Serializable]
public class MyClass
{
   public string Property1 { get; set; }
   public string Property1 { get; set; }
}

Vous voulez qu'il soit sérialisable afin que votre service Web puisse le renvoyer au format xml ou json (quel que soit le résultat). Le linq ressemblerait à quelque chose comme ça:

var result = from r in dataSet.Table[0].Rows.AsEnumerable()
             select new MyClass() {
                Property1 = r["Field1"].ToString()
                Property2 = r["Field2"].ToString()
             };

return result.ToList();

D'après mon expérience personnelle, les ensembles de données sont généralement des ressources. Linq sera également plus efficace que vos boucles for.

J'espère que cela vous aidera.

Supprimez la référence (system.Data) ..et ajoutez à nouveau la même référence .. cela pourrait être un travail ..

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