2008-09-18 9 views

उत्तर

4

आप अपने LINQ परिणाम एक List करने के लिए सेट में बदल सकते हैं, आप सख्ती से एक DataSet रिपोर्ट SetDataSource के रूप में उपयोग नहीं की जरूरत है, तो आप एक IEnumerable के साथ एक क्रिस्टल रिपोर्ट डेटा की आपूर्ति कर सकते हैं। चूंकि IEnumerable से List inherits आप एक सूची के लिए अपनी रिपोर्ट 'डेटा स्रोत सेट कर सकते हैं, तो आप सिर्फ अपने LINQ परिणाम सेट पर .ToList() विधि कॉल करने के लिए है। असल में:

 CrystalReport1 cr1 = new CrystalReport1(); 

     var results = (from obj in context.tSamples 
         where obj.ID == 112 
         select new { obj.Name, obj.Model, obj.Producer }).ToList(); 

     cr1.SetDataSource(results); 
     crystalReportsViewer1.ReportSource = cr1; 
1

Altough मैंने इसे स्वयं नहीं किया है, यह संबंधों को संरक्षित करने वाले SQLCommand ऑब्जेक्ट को वापस करने के लिए संबंधों को प्राप्त करने के लिए उत्सुक बनाने और GetCommand (IQueryable) के संयोजन के लिए उत्सुक बनाने के लिए डेटाकॉन्टेक्स्ट.लोडऑप्शन के संयोजन का उपयोग करके संभव है।

MSDN Forums पर अधिक जानकारी देखें।

2

msdn doc के सुझाव है कि आप एक ICollection करने के लिए एक क्रिस्टल रिपोर्ट बाध्य कर सकते हैं।

क्या मैं एक सूची (टी) की सिफारिश कर सकता हूं?

0

उपरोक्त कोड वेब अनुप्रयोग में काम नहीं करेगा यदि आपके पास dbnull मान हैं। आपको परिणाम सूची ऑब्जेक्ट को डेटासेट या डेटाटेबल में कनवर्ट करना होगा। इसके लिए कोई अंतर्निहित विधि नहीं है। मैं एक ही मुद्दे से गुजर चुका हूं और इंटरनेट पर अन्वेषण के घंटों के बाद, मुझे समाधान मिला और यहां किसी को भी इसके साथ फंसने में मदद करने के लिए साझा करना चाहते हैं। आप अपनी परियोजना में एक वर्ग बनाने के लिए है: - अपने क्रिस्टल रिपोर्ट स्थापित

public class CollectionHelper 
    { 
     public CollectionHelper() 
     { 
     } 

     // this is the method I have been using 
     public DataTable ConvertTo<T>(IList<T> list) 
     { 
      DataTable table = CreateTable<T>(); 
      Type entityType = typeof(T); 
      PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType); 

      foreach (T item in list) 
      { 
       DataRow row = table.NewRow(); 

       foreach (PropertyDescriptor prop in properties) 
       { 
        row[prop.Name] = prop.GetValue(item) ?? DBNull.Value; 
       } 

       table.Rows.Add(row); 
      } 

      return table; 
     } 

     public static DataTable CreateTable<T>() 
     { 
      Type entityType = typeof(T); 
      DataTable table = new DataTable(entityType.Name); 
      PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType); 

      foreach (PropertyDescriptor prop in properties) 
      { 
       // HERE IS WHERE THE ERROR IS THROWN FOR NULLABLE TYPES 
       table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(
      prop.PropertyType) ?? prop.PropertyType); 
      } 

      return table; 
     } 
    } 

और यहाँ

CrystalReport1 cr1 = new CrystalReport1(); 

      var results = (from obj in context.tSamples 
          where obj.ID == 112 
          select new { obj.Name, obj.Model, obj.Producer }).ToList(); 
      CollectionHelper ch = new CollectionHelper(); 
      DataTable dt = ch.ConvertTo(results); 
      cr1.SetDataSource(dt); 
      crystalReportsViewer1.ReportSource = cr1; 
संबंधित मुद्दे