Вопрос

Что ж, во -первых, извините за этот вопрос, это должно быть довольно прямо для вас, ребята, но я борюсь за него, и мне нужно заставить его работать :( Ну, я пытаюсь использовать набор данных в своем приложении

и когда я это сделал, я получил:

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

в моем приложении на System.Data уже есть ссылка из C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll

и я также использую свои предложения использования

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

Этот набор данных является ответом от веб -сервиса, чтобы какие -либо идеи о том, как решить эту проблему?

ПС.Не знаю, поможет ли это, но я использую nHaml для визуализации своего представления.

Большое спасибо


ОБНОВЛЯТЬ:

Единственное решение, которое я нашел на данный момент, заключалось в том, чтобы вместо передачи DataSet в преобразователь представления DataSet в

<List<List<String>>

и пройдите цикл по всему набору данных вот так

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

На самом деле это полное безумие, не так ли?

Вся эта работа может быть легко выполнена в представлении, если напрямую использует набор данных, я надеюсь, что кто -то может помочь мне с более упрощенным способом сделать это

Спасибо :)


ОБНОВЛЕНИЕ (РЕШЕНИЕ)

Ответ Саймона был действительно эффективным и сработал с первой попытки после добавления пространств имен для System.Data и System.Xml, но в то же время ответ Джоша представляет собой очень приятный и классный способ работы с наборами данных, который, на мой взгляд, работает намного лучше. и я думаю, что пойду на это сейчас.

Спасибо за помощь

Это было полезно?

Решение

попробуйте добавить явную ссылку на System.Data в вашу конфигурацию 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>

очевидно, заменяя "..." другими вашими ссылками и конфигурацией

Другие советы

Единственное, о чем я мог подумать, это то, что в контексте страницы ссылка System.Data не видна.

Попробуйте добавить пространство имен в свой web.config:

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

Я знаю, что это не совсем часть вашего вопроса, но я бы рекомендовал создать класс, наполненный свойствами, представляющими поля в вашей таблице данных.Используя Linq, вы можете легко преобразовать строки в объект класса и вернуть их список.Вот примерный (и некомпилированный) код.

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

Вы хотите, чтобы он был сериализуемым, чтобы ваш веб-сервис мог возвращать его в формате xml или json (как бы вы его ни возвращали).linq будет выглядеть примерно так:

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

return result.ToList();

По моему личному опыту, наборы данных обычно пожирают ресурсы.Кроме того, Linq будет более эффективным, чем циклы for.

Надеюсь это поможет.

Удалите ссылку (system.Data).. и снова добавьте ту же ссылку..возможно это работа..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top