1

好吧,首先对这个问题感到抱歉,这对你们来说一定很简单,但我正在努力解决这个问题,我需要让它发挥作用:(好吧,我正在尝试在我的应用程序上使用 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 子句

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

此数据集是来自 Web 服务的响应 那么关于如何解决此问题的任何想法?

PS。我不知道它是否有帮助,但我正在使用 nHaml 来呈现我的视图

非常感谢


更新:

我现在找到的唯一解决方案是将 DataSet 传递给视图转换器,将 DataSet 传递给

<List<List<String>>

并像这样在整个 DataSet 中传递一个循环

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,所有这些工作都可以很容易地在视图中完成我希望任何人都可以帮助我用更简单的方式来做这件事

谢谢 :)


更新(解决方案)

Simon 的回答非常有效,它在为 System.Data 和 System.Xml 添加命名空间后的第一次尝试中起作用,但同时,Josh 的回答提出了一种非常好的和很酷的使用 DataSet 的方法,我认为效果更好我想我现在就去。

谢谢你的帮助

4

3 回答 3

3

尝试在 NHAML 配置中添加对 System.Data 的显式引用

<?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>

显然用您的其他参考和配置替换“...”

于 2009-10-24T10:26:41.777 回答
1

我唯一能想到的是,在页面的上下文中, 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; }
}

您希望它是可序列化的,以便您的 Web 服务可以将其作为 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 将比您的 for 循环更有效。

希望这可以帮助。

于 2009-10-23T18:09:43.290 回答
0

删除参考(system.Data)..并再次添加相同的参考..它可能会起作用..

于 2009-12-17T09:10:05.350 回答