Pregunta

Bueno, en primer lugar, lo siento por esta pregunta, debe ser bastante sencillo para ustedes, pero me estoy esforzando por hacerlo, y necesito hacer que funcione :( Bueno, estoy tratando de usar DataSet en mi aplicación

y cuando lo renderizo obtuve:

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

en mi aplicación, System.Data ya está siendo referenciado desde C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Data.dll

y también estoy usando en mis cláusulas de uso

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

Este conjunto de datos es una respuesta de un servicio web ¿Alguna idea sobre cómo solucionar este problema?

PS. No sé si ayuda, pero estoy usando nHaml para mostrar mi vista

Muchas gracias


ACTUALIZACIÓN:

La única solución que encontré por el momento fue pasar un DataSet al convertidor de vista, el DataSet a un

<List<List<String>>

y pase un bucle a través de todo el DataSet como este

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 realidad esto es completamente loco, ¿no?

Todo este trabajo se podría hacer fácilmente en la vista si se usa DataSet directamente Espero que alguien pueda ayudarme con una forma más simplista de hacerlo

Gracias :)


ACTUALIZACIÓN (SOLUCIÓN)

La respuesta de Simon fue realmente efectiva y funcionó en el primer intento después de agregar espacios de nombres para System.Data y System.Xml, pero al mismo tiempo, la respuesta de Josh presenta una manera muy agradable y agradable de trabajar con DataSets, que en mi opinión Funciona mucho mejor y creo que lo haré ahora.

Gracias por tu ayuda

¿Fue útil?

Solución

intente agregar una referencia explícita a System.Data en su configuración 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>

obviamente reemplazando " ... " con tus otras referencias y config

Otros consejos

Lo único en lo que podría pensar es que, en el contexto de la página, la referencia System.Data no está visible.

Intente agregar el espacio de nombres en su web.config:

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

Sé que no es realmente parte de su pregunta, pero recomendaría crear una clase llena de propiedades que representen los campos en sus datos. Usando Linq, puedes convertir fácilmente tus filas en el objeto de clase y devolver una lista de ellas. Aquí hay un código en bruto (y no compilado).

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

Desea que sea serializable para que su servicio web pueda devolverlo como xml o json (sin embargo, lo está devolviendo). El linq se vería así:

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

return result.ToList();

En mi experiencia personal, los DataSets tienden a ser recursos de recursos. Además, Linq será más eficiente que tus bucles for.

Espero que esto ayude.

Borre la referencia (datos del sistema) ... y agregue la misma referencia nuevamente ... podría ser un trabajo ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top