2010-04-15 20 views
9

// मेरी प्रपत्रबेनामी LINQ क्वेरी से WinForms DataGridView भरें

BindingSource bs = new BindingSource(); 

private void fillStudentGrid() 
{ 
    bs.DataSource = Admin.GetStudents(); 
    dgViewStudents.DataSource = bs; 
} 

// व्यवस्थापक वर्ग से से

public static List<Student> GetStudents() 

{ 
    DojoDBDataContext conn = new DojoDBDataContext(); 

    var query = 
     (from s in conn.Students 
     select new Student 
     { 
      ID = s.ID, 
      FirstName = s.FirstName, 
      LastName = s.LastName, 
      Belt = s.Belt 
     }).ToList(); 

    return query; 
} 
मैं Winforms में एक DataGridView नियंत्रण को भरने के लिए कोशिश कर रहा हूँ

, और मैं केवल कुछ मूल्य चाहते हैं। कोड संकलित करता है, लेकिन रनटाइम त्रुटि फेंकता है:

क्वेरी में इकाई प्रकार 'DojoManagement.Student' के स्पष्ट निर्माण की अनुमति नहीं है।

क्या इस तरह से काम करने का कोई तरीका है?

उत्तर

5

आप पहले से ही एक IEnumerable<Student> उदाहरण है और आप

एक प्रश्न के कारणों का वर्णन किया here) तुम भी डॉन 'से संस्थाओं परियोजना नहीं कर सकते टी इस डेटा स्रोत के लिए बाध्य करने के लिए एक सूची बनाने के लिए की जरूरत है - आप बहुत इस के लिए यह बदलकर अपनी विधि को सरल बनाने के कर सकते हैं:

public static IEnumerable<Student> GetStudents() 
{ 
    return new DojoDBDataContext().Students; 
} 

किसी भी तरह की संपत्तियों को मानचित्रित करने के लिए एक नया उदाहरण प्रोजेक्ट करने का कोई कारण नहीं है, आप जिस प्रश्न को सभी मूल्यों को वापस कर रहे हैं उसे निष्पादित करके और आपका प्रक्षेपण आपको कुछ भी बचा नहीं सकता है। क्या तुम सच में ही छुपा आप ऐसा कर सकता है जानकारी के प्रयोजनों के लिए इस क्वेरी से कुछ ही मान करना चाहते हैं:

public static IEnumerable<Object> GetStudents() 
{ 
    DojoDBDataContext conn = new DojoDBDataContext(); 

    return conn.Students 
       .Select(s => new { 
        ID = s.ID, 
        FirstName = s.FirstName, 
        LastName = s.LastName, 
        Belt = s.Belt 
       }); 
} 

संपादित करें: आप सी # 4 का उपयोग नहीं कर रहे हैं, तो आप सामग्री कास्ट करने के लिए होगा IEnumerable<T> से Object स्पष्ट रूप से। केवल सी # 4 IEnumerable<T> के लिए कॉन्वर्सिस का समर्थन करता है। तो अगर आप सी # 3 का उपयोग कर रहे आप ऐसा करना होगा:

public static IEnumerable<Object> GetStudents() 
{ 
    DojoDBDataContext conn = new DojoDBDataContext(); 

    return conn.Students 
       .Select(s => new { 
        ID = s.ID, 
        FirstName = s.FirstName, 
        LastName = s.LastName, 
        Belt = s.Belt 
       }).Cast<Object>(); 
} 
+0

असाइन करने से पहले प्रक्षेपण निष्पादित करें, मैं एक नया छात्र उदाहरण पेश कर रहा हूं क्योंकि ... मैं वास्तव में नहीं जानता कि मैं क्या कर रहा हूं (जाहिर है)। मैं आसानी से सभी छात्रों से सारी जानकारी प्राप्त कर सकता हूं, लेकिन मुझे केवल कुछ फ़ील्ड चाहिए और रनटाइम पर डाटाग्रिड व्यू भर रहा हूं क्योंकि यह केवल पढ़ा जाता है। – mdvaldosta

+0

कोड और पाठ के लिए धन्यवाद। – mdvaldosta

1

बस एक गुमनाम प्रकार की वस्तुओं की एक सूची लौट:

public static List<object> GetStudents() 
{ 
    DojoDBDataContext conn = new DojoDBDataContext(); 

    var query = 
     (from s in conn.Students 
     select new 
     { 
      ID = s.ID, 
      FirstName = s.FirstName, 
      LastName = s.LastName, 
      Belt = s.Belt 
     }).Cast<object>().ToList(); 

    return query; 
} 
+0

महान है, कि काम करता है! मैं मदद नहीं कर सकता लेकिन सोचने के लिए हालांकि कास्टिंग से बेहतर तरीका है। – mdvaldosta

+0

ठीक है, आप किसी अज्ञात प्रकार की सूची नहीं लौटा सकते हैं, एक 'सूची <अज्ञात प्रकार>' ऑब्जेक्ट्स की सूची में असाइन नहीं किया जा सकता है ... इसलिए आपको डालना होगा। वैसे भी, GetStudents से वास्तविक छात्र ऑब्जेक्ट्स को वापस करना बेहतर होगा, और डेटासॉर –

3

एक बार मैं एक GridView पर परिणामों को प्रदर्शित करने के लिए एक समाधान के लिए चारों ओर देख रहा था। मेरी समस्या यह थी कि मैं डेटाग्रिड की संपत्ति सेट करना भूल गया: विनफॉर्म पर कोई भी "डेटा स्रोत" नहीं।

यह LINQ (सिर्फ नमूना कोड) के साथ प्रदर्शन gridview के लिए सरल समाधान

DataGrid dataGrid1 = new DataGrid(); 

var custQuery = 
    from cust in db.Customers 
    select cust; 

dataGrid1.DataSource = custQuery; 
+0

सभी उन्नत बाध्यकारी-संबंधित समाधानों को देख रहा था और सबसे सरल को अनदेखा कर रहा था। यह एक मेरे लिए हल हो गया। धन्यवाद – djv

संबंधित मुद्दे