Domanda

Beh, prima di tutto mi dispiace per questa domanda, deve essere piuttosto semplice per voi ragazzi, ma sto lottando su di me e devo farlo funzionare :( Bene, sto cercando di utilizzare DataSet sulla mia applicazione

e quando lo visualizzo ho ricevuto:

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

nella mia applicazione System.Data fa già riferimento a C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Data.dll

e sto usando anche le mie clausole using

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

Questo DataSet è una risposta da un servizio Web Quindi qualche idea su come risolvere questo problema?

PS. Non so se sia d'aiuto, ma sto usando nHaml per rendere il mio punto di vista

Grazie mille


UPDATE:

L'unica soluzione che ho trovato per ora era invece di passare un DataSet al convertitore vista il DataSet a un

<List<List<String>>

e passa un ciclo attraverso l'intero DataSet in questo modo

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);

In realtà questo è completamente folle, vero?

Tutto questo lavoro potrebbe essere facilmente eseguito nella vista se si utilizza direttamente DataSet Spero che qualcuno possa aiutarmi con un modo più semplicistico per farlo

Grazie :)


AGGIORNAMENTO (SOLUZIONE)

La risposta di Simon è stata davvero efficace e ha funzionato al primo tentativo dopo l'aggiunta di spazi dei nomi per System.Data e System.Xml ma allo stesso tempo, la risposta di Josh presenta un modo molto bello e interessante di lavorare con DataSet, che secondo me funziona molto meglio e penso che ci proverò ora.

Grazie per l'aiuto

È stato utile?

Soluzione

prova ad aggiungere un riferimento esplicito a System.Data nella tua configurazione 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>

ovviamente sostituendo " ... " con altri riferimenti e configurazioni

Altri suggerimenti

L'unica cosa che mi viene in mente è che nel contesto della pagina, il riferimento System.Data non è visibile.

Prova ad aggiungere lo spazio dei nomi nel tuo web.config:

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

So che non fa davvero parte della tua domanda, ma consiglierei di creare una classe piena di proprietà che rappresentino i campi nel tuo datatable. Usando Linq, puoi facilmente convertire le tue righe nell'oggetto classe e restituirne un elenco. Ecco del codice approssimativo (e non compilato).

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

Vuoi che sia serializzabile in modo che il tuo servizio web possa restituirlo come xml o json (comunque lo stai restituendo). Il linq sarebbe simile a questo:

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

return result.ToList();

Nella mia esperienza personale, i DataSet tendono ad essere maiali delle risorse. Inoltre, Linq sarà più efficiente del tuo per i loop.

Spero che questo aiuti.

Elimina il riferimento (system.Data) ..e aggiungi nuovamente lo stesso riferimento .. potrebbe funzionare ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top