2011-10-10 7 views
5

मुझे डेटाबॉर्स के साथ डेटाब्रिडव्यू मिला है जो मेरी बाइंडिंगलिस्ट पर सेट है। सूची के आइटम INOTifyProperty को लागू करें, इसलिए डेटाग्रिडव्यू स्वचालित रूप से सूची में परिवर्तनों का जवाब देता है।डेटाग्रिड व्यू और बाइंडिंगलिस्ट: सेल मूल्य बदल गया है या नहीं, यह कैसे जांचें?

अब मुझे डेटाग्रिडव्यू कॉलम के कुछ सारांशों की गणना करना है।

यह किया जाना चाहिए जब:

  • डेटा स्रोत परिवर्तन (OnDataSourceChanged)
  • सेल मूल्य परिवर्तन (OnCellValueChanged)

पहले एक स्पष्ट है, लेकिन मैं के साथ एक छोटी सी समस्या मिल गया है दूसरा एक।

आग OnCellValueChanged उपयोगकर्ता नियंत्रण द्वारा या पर सेल का मान बदल जाता है जब:

myDataGridView.Rows[x].Cells[y].Value=newValue; 

लेकिन क्या बारे में:

myBindingList[myInvoice].Property1=newValue; 

DataGridView अपने आप ताज़ा (INotifyPropertyChanged) लेकिन यह OnCellValueChanged ईवेंट सक्रिय नहीं है ।

कोई विचार मैं अपने डेटाग्रिड व्यू से ऐसी जानकारी कैसे प्राप्त कर सकता हूं? इसे डेटाग्रिड व्यू स्तर पर किया जाना है क्योंकि मैं अपना नियंत्रण लिख रहा हूं जो डीजीवी बढ़ाता है।

सहायता के लिए धन्यवाद।

उत्तर

0

यह निकटतम मैं हल करने के बारे में सोच सकता हूं कि यह बाध्यकारी स्रोत को डेटासोर्स के रूप में उपयोग करना है और फिर अपने कस्टम डेटाग्रिड व्यू के भीतर बाइंडिंगसोर्स सूची चेंज किए गए ईवेंट के जवाब में अपना स्वयं का ईवेंट बढ़ाएं।

मैं शायद इस तरह OnDataSourceChanged कुछ ओवरराइड चाहते हैं:

public event EventHandler CustomCellValueChanged; 

protected override void OnDataSourceChanged(EventArgs e) 
{ 
    bs = this.DataSource as BindingSource; 

    if (bs == null) 
    { 
     throw new ArgumentException("DataSource must be a BindingSource"); 
    } 

    bs.ListChanged += new System.ComponentModel.ListChangedEventHandler(bs_ListChanged); 

    base.OnDataSourceChanged(e); 
} 

void bs_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e) 
{    
    if (CustomCellValueChanged != null) 
    {    
     CustomCellValueChanged(this, new EventArgs()); 
    } 
} 

इस के साथ समस्या यह है कि वहाँ कोई रास्ता नहीं है (मैं के बारे में सोच सकते हैं) सही सेल गुण प्राप्त करने के ताकि आप सभी का पुनर्मूल्यांकन करना होगा कॉलम, न केवल कॉलम जिसमें परिवर्तन शामिल था।

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