2011-03-11 12 views
7

हमारे विंडोज़ फॉर्म पर एक डाटाबेस XtraGrid है। कॉलम में से एक चेक बॉक्स है। समस्या निम्नानुसार है: जब उपयोगकर्ता चेकबॉक्स चेक करते हैं और ठीक बटन पर क्लिक करते हैं, तो चेकबॉक्स, स्पष्ट रूप से चेक किए जाने पर, ग्रिड द्वारा चेक नहीं माना जाता है। जब मैं ऐसा करता हूं (पंक्तियों के माध्यम से लूपिंग करते समय):DevExpress XtraGrid चेकबॉक्स चेक पंजीकृत नहीं है जब तक कि फोकस

isAllowed = Convert.ToBoolean(viewMain.GetRowCellValue(nRowCtr, "IsAllowed")) 

मैं वापस झूठा हो जाता हूं। लेकिन, यदि उपयोगकर्ता बॉक्स को चेक करता है, और फिर फॉर्म पर या किसी अन्य पंक्ति पर इस ग्रिड में क्लिक करता है, तो चेक किए गए चेकबॉक्स से फोकस लेता है, ऊपर दिया गया एक ही कोड सही होगा।

इस व्यवहार को ठीक करने के तरीके पर कोई अंतर्दृष्टि की सराहना की जाएगी।

वर्कअराउंड पाया: डिफ़ॉल्ट सेटिंग्स के साथ , जब उपयोगकर्ता एक सेल पर क्लिक कर संपादित करें, सेल संपादन मोड में, चला जाता है (इस मामले में मैं एक CheckEdit भंडार नियंत्रण है में) संपादक नियंत्रण लोड करता है और परिवर्तन नियंत्रण के मूल्य (इस मामले में राज्य की जांच की)। यदि मैं किसी अन्य पंक्ति या किसी अन्य नियंत्रण पर क्लिक करता हूं, तो सेल डेटा आइटम में परिवर्तन करने के बाद संपादन मोड से बाहर हो जाता है। लेकिन अगर मैं एक बटन पर क्लिक करता हूं, तो मेरा परिवर्तन गुम हो जाता है। वैकल्पिक हल CheckEdit के CheckedChanged घटना का उपयोग करने के संपादक को बंद करने के लिए है:

Private Sub edCheck_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles edCheck.CheckedChanged 
     gridYears.FocusedView.CloseEditor() 
End Sub 

उत्तर

10

वहाँ वास्तव में यह कर (यह सब RepositoryItems के लिए काम करता है) के एक क्लीनर तरीका, DevExpress site के बारे में विस्तृत। विचार ग्रिडव्यू.पोस्ट एडिटर विधि को एक रिपोजिटरी आइटम के एडिटवैल्यू चेंज इवेंट हैंडलर से कॉल करने के लिए तुरंत ग्रिड के सेल और अंतर्निहित कॉलम में संपादित मूल्य को सहेजने के लिए है।

0

देखने के CellValueChanging ईवेंट हैंडलर में इस कोड को समस्या हल:

private void OnCellValueChanging(object sender, CellValueChangedEventArgs e) 
{ 
    _gridView.SetFocusedRowCellValue(_gridView.FocusedColumn, e.Value); 
}