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;

この DataSet は Web サービスからの応答です。この問題を解決する方法について何かアイデアはありますか?

PS。役立つかどうかはわかりませんが、nHaml を使用してビューをレンダリングしています

どうもありがとう


アップデート:

今のところ見つけた唯一の解決策は、代わりに 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 の回答は DataSets を操作するための非常に優れたクールな方法を提示しました。そして私は今それのために行くと思います。

助けてくれてありがとう

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

私の個人的な経験では、DataSet はリソースを大量に消費する傾向があります。また、Linq は for ループよりも効率的です。

お役に立てれば。

于 2009-10-23T18:09:43.290 に答える
0

Reffrence(system.Data) を削除し、同じ reffrence を再度追加します。動作する可能性があります。

于 2009-12-17T09:10:05.350 に答える