2010-12-16 12 views
18

से जुड़ा हुआ बाध्यकारी स्रोत से बाध्य होने पर DataGridView को सॉर्ट करने के लिए कैसे करें है जो BindingSource से जुड़ा हुआ है।किसी EF4 इकाई

मेरे BindingSource संस्थाओं की एक IQueryable सूची से जुड़ा हुआ है:

public void BindTo(IQueryable elements) 
    { 
     BindingSource source = new BindingSource(); 
     source.DataSource = elements; 

     bindingNavigator1.BindingSource = source; 
     dataGridView1.DataSource = source; 

    } 

मैं अपने उपयोगकर्ताओं डेटा को सॉर्ट करने के लिए ग्रिड हेडर पर क्लिक करने में सक्षम होना चाहता हूँ - यह काम करने के लिए प्राप्त करने के लिए संघर्ष कर रहा। क्या यह संभव है? यदि ऐसा है, तो मुझे इसे कैसे करना है?

+0

नोट: DataGridView WindowsForms, WPF नहीं लगता है। सिर्फ उन लोगों के लिए जिन्होंने अपने डब्ल्यूपीएफ डाटाग्रिड सॉर्टिंग मुद्दे के लिए समाधान ढूंढने की आशा की थी। – OneWorld

उत्तर

11

मैंने हाल ही में इस मुद्दे के साथ संघर्ष किया; ऐसा लगता है कि IQueryable इंटरफ़ेस डेटाव्यूग्रिड के लिए डेटा को स्वचालित रूप से सॉर्ट करने के तरीके के बारे में जानने के लिए पर्याप्त जानकारी प्रदान नहीं करता है;

 private void myDataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
    DataGridViewColumn column = myDataGridView.Columns[e.ColumnIndex]; 

    _isSortAscending = (_sortColumn == null || _isSortAscending == false); 

    string direction = _isSortAscending ? "ASC" : "DESC"; 

    myBindingSource.DataSource = _context.MyEntities.OrderBy(
     string.Format("it.{0} {1}", column.DataPropertyName, direction)).ToList(); 

    if (_sortColumn != null) _sortColumn.HeaderCell.SortGlyphDirection = SortOrder.None; 
    column.HeaderCell.SortGlyphDirection = _isSortAscending ? SortOrder.Ascending : SortOrder.Descending; 
    _sortColumn = column; 
    } 

मुझे आशा है कि मदद करता है: तो आप या तो इकाई स्रोत से अपने संग्रह repackage करने के लिए इसका इस्तेमाल करते हैं या मैं क्या किया करते हैं और मैन्युअल रूप से छंटाई कार्यक्षमता संभाल कर सकते हैं कुछ का उपयोग कर सकते है।

+0

अद्यतन करने की अनुमति देते समय ऐसा करने का कोई तरीका है? यदि आप ToList() का उपयोग करते हैं, तो आप केवल अस्थायी सूची में लिखने में सक्षम होंगे, और यदि आप ToList का उपयोग नहीं करते हैं, तो DataGridView रिकॉर्ड जोड़ने को अक्षम करना प्रतीत होता है यदि यह IOrderedEnumerable से जुड़ा हुआ है ... –

+1

मुझे एहसास हुआ कि मुझे जरूरी है ObjectQuery.OrderBy को कॉल करने के लिए, और IENumerable.OrderBy अद्यतन करने योग्य बाध्यकारी बनाए रखने के लिए। –

0

VB.NET

आप LINQ वाक्य रचना के साथ एक bindingsource उपयोग कर रहे हैं जब इकाई framwork से एक DataGridView के साथ जुड़े एक bindningsource लोड हो रहा है वस्तुओं "NCFile आप इस

इस मामले में की तरह अपने डेटा सॉर्ट कर सकते हैं "

bsFileSections.DataSource = From ncfps In NCFile.NCFilePartSet Order By ncfps.Sort Select ncfps 

NCFilePartSet या इस

की तरह" की एक सूची के लिए एक विदेशी स्तंभ होने के साथ "
bsFileSections.DataSource = NCFile.NCFilePartSet.OrderBy(Function(ncfps) ncfps.Sort) 

जहां "क्रमबद्ध करें" NCFilePartSet

में एक स्तंभ है

अपडेट संस्थाओं काम कर रहा है और वापस डेटाबेस के लिए दर्शाता जारी पर

+2

ओपी चाहता है कि "[मेरे] उपयोगकर्ता ... डेटा को सॉर्ट करने के लिए ग्रिड हेडर पर क्लिक करें।" यदि आप सॉर्टिंग कॉलम को हार्डकोड करते हैं तो आपका उत्तर काम करता है, लेकिन जब आप सॉर्ट कॉलम को बदलना चाहते हैं और किसी भी डेटा को खोना नहीं चाहते हैं तो वह डाटाबेसिंग को कैसे संभालता है जिसे वह पहले ही संपादित/जोड़ चुका है? मुझे लगता है कि यह असली चुनौती है। – Pat

0

हाँ, यह आसानी से एक sortable DGV करना संभव है जब एफई के लिए बाध्य डेटा। BLW library से भी उपयोग करें (भी, How do I implement automatic sorting of DataGridView? देखें)।

public void BindTo(IQueryable elements) 
{ 
    BindingSource source = new BindingSource(); 
    source.DataSource = new BindingListView(elements.ToList()); 

    bindingNavigator1.BindingSource = source; 
    dataGridView1.DataSource = source; 

} 

मेरी परीक्षणों में, तब भी जब .ToList() निर्माता (जैसा कि ऊपर) के भीतर बुलाया गया था, परिवर्तन डीबी, जो मुझे हैरान कर दिया करने के लिए प्रचारित किया गया।

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