2013-05-23 4 views
6

मैं एक DevExpress GridControl जिसके लिए मैं की स्थापना कर रहा हूँ यह डेटा स्रोत है, इसलिए की तरह है:डाटा एक दुकान क्वेरी को सीधे बंधन (DbSet, DbQuery, DbSqlQuery) इकाई की रूपरेखा समर्थित नहीं है 5

var regs = (from vcap in context.chaps 
          select vcap); 

gridControl1.DataSource = new BindingList<chaps>(regs.ToList()); 

लेकिन जब मैं का उपयोग करें ग्रिड, पंक्तियां जिन्हें मैं जोड़ता हूं या हटाता हूं, सहेजे नहीं जाते हैं, प्रारंभिक पंक्तियों में केवल परिवर्तन ही सहेजे जाते हैं।

अगर मैं ऐसा करते हैं:

gridControl1.DataSource = context.chaps.Local; 

मैं किसी भी पंक्तियों नहीं मिलता है, और AddNewRow भी नेत्रहीन एक नई पंक्ति जोड़ना नहीं है।

मैं ऐसा करते हैं तो:

gridControl1.DataSource = context.chaps.ToList(); 

मैं पंक्तियों और उन्हें करने के लिए परिवर्तन सहेज सकते हैं; पंक्तियों को दृष्टि से हटा दिया जाता है लेकिन डीबी में नहीं, और AddNewRow नहीं हो सकता है।

मैं ऐसा करते हैं तो:

gridControl1.DataSource = context.chaps; 

मैं इस अपवाद:

Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList(). 

लेकिन context.chaps.Local या तो एक ToBindingList विधि नहीं है।

मुझे नहीं लगता कि यह डेवेक्सप्रेस की समस्या है, लेकिन मुझे डेटासेट को सही ढंग से सेट करने का तरीका नहीं मिल रहा है। context.chaps.Local.ToBindingList() समकक्ष पाने का कोई तरीका है?

उत्तर

7

context.chaps.LocalObservableCollection<T> है। लेकिन ToBindingListObservableCollection<T> की एक विधि है, लेकिन DbExtensions में एक विस्तार विधि नहीं है:

public static BindingList<T> ToBindingList<T>(
    this ObservableCollection<T> source) where T : class; 

आदेश इस विधि का उपयोग और Intellisense के साथ इसे देख आप जहां ToBindingList() कॉल करने के लिए कोशिश कोड फ़ाइल में इसी नाम स्थान शामिल करने की जरूरत करने के लिए :

using System.Data.Entity; 
+0

तो मैंने gridControl1.DataSource = DbExtensions.ToBindingList (context.capitulo.Local); जो पूरी तरह से काम करता है! मैं जोड़, संशोधित और हटा सकता हूं। सिवाय इसके कि यह शुरू में सभी पंक्तियों को लोड नहीं करता है (मेरा डेटाग्रिड खाली है)। कोई विचार यह कैसे करना है? या मैंने जवाब गलत समझा? – user2414791

+1

@ user2414791: एक्सटेंशन विधियों का उपयोग करते समय मानक वाक्यविन्यास सामान्य उदाहरण विधियों के समान है: 'gridControl1.DataSource = context.capitulo.Local.ToBindingList();'। लेकिन मुझे नहीं लगता कि यह समस्या को ठीक करेगा। बेशक आपको डीबी से कुछ भी लोड करने के लिए अभी भी 'regs.ToList() 'या' regs.Load() 'या' context.chaps.Load() 'का उपयोग करना होगा। 'लोकल 'कोई क्वेरी नहीं चलाता है, यह केवल उन संस्थाओं को प्रदान करता है जो पहले से ही' पर्यवेक्षण चयन 'के रूप में लोड किए गए हैं। – Slauma

+0

बिल्कुल सही! धन्यवाद!!!! – user2414791

1

सुनिश्चित करें कि आप बाध्यकारी सूची के साथ अपने डेटा स्रोत को बांधने से पहले सभी पंक्तियों को लोड कर लें।

context.chaps.load 'अपना डेटा gridcontrol1.datasource = context.chaps.Local.ToBindingList() लोड करें' यह ग्रिड पर रिकॉर्ड लोड करेगा। आपको नया जोड़ने के लिए भी एक नई पंक्ति दें या आपको ग्रिड को भी अपडेट करने की अनुमति है।

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