سؤال

Well, first of all sorry about this question it must be pretty straight forward for you guys but I'm struggling myself on it, and I need to make it work :( Well I'm trying t o use DataSet on my application

وعندما قمت بتقديمه حصلت على:

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;

This DataSet is a response from a Webservice So any Ideas on how to fix this problem?

ملاحظة.لا أعرف إذا كان ذلك يساعد، ولكنني أستخدم 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);

في الواقع هذا هو مجنون تماما أليس كذلك؟

All this job could be easily done into the view if using DataSet directly I hope anyone can help me with a more simplistic way to do it

شكرًا لك :)


التحديث (الحل)

كانت إجابة سيمون فعالة حقًا وقد نجحت في المحاولة الأولى بعد إضافة مساحات أسماء لـ System.Data وSystem.Xml ولكن في الوقت نفسه، قدمت إجابة Josh طريقة لطيفة جدًا ورائعة للعمل مع DataSets، والتي في رأيي تعمل بشكل أفضل بكثير وأعتقد أنني سأفعل ذلك الآن.

شكرا لمساعدتك

هل كانت مفيدة؟

المحلول

حاول إضافة مرجع صريح إلى 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