2009-10-23 3 views
1

Ну, прежде всего, извините за этот вопрос, это должно быть довольно прямо для вас, ребята, но я борюсь за это, и мне нужно заставить его работать :( Ну я пытаюсь использовать DataSet в моем приложенииASP.NET MVC - System.Data.DataSet не ссылается на проблему

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

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; 

Этот DataSet является ответом от Webservice Поэтому любые идеи о том, как исправить эту проблему?

PS. Я не знаю, если это помогает, но я использую nHaml, чтобы сделать мой взгляд

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


UPDATE:

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

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

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

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

Спасибо :)


UPDATE (РЕШЕНИЕ)

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

Спасибо вам помочь

+0

do u управляет веб-сервисом? если бы я попытался изменить его, чтобы быть строковыми типизированными классами вместо наборов данных – Simon

ответ

3

попробуйте добавить прямую ссылку на 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> 

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

+0

Perfect Simon, это сработало очень хорошо, добавив это, я также добавил инструкции для System.Xml, но это была точно такая же процедура. Это сработало и ответили на мой вопрос, но на самом деле мне очень нравится, как Джош представил новое решение для передачи DataSets, так что Thumbs Up для вас обоих, спасибо за помощь! – zanona

1

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

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

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

Я знаю, что это на самом деле не часть вашего вопроса, но я бы рекомендовал создание класса наполненных свойства, представляющее поле в вашем DataTable. Используя 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(); 

В моем личном опыте, DataSets, как правило, свиней ресурсов. Кроме того, Linq будет более эффективным, чем ваш цикл.

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

+0

Wow Josh, этот второй пример показывает, что я действительно работал, и он намного чище и хорошо организован, мне очень нравятся такие вещи. Единственное, что я должен был удалить метод AsEnumerable(), чтобы он работал. Но теперь работает как шарм! :) Большое спасибо за это, к сожалению, пример web.config не работает, но не беспокойтесь об этом. Еще раз спасибо – zanona

0

Удалить Reffrence (система .Data) .. и добавьте те же самые reffrence снова .. это может быть работа.