2011-08-14 25 views
13

में पुराने और नए मूल्य की तुलना करें डेटाग्रिड व्यू सेल ForeColor को कैसे बदलें, इस पर आधारित है कि नया सेल मान> या < वर्तमान/पुराने सेल मान से अधिक है? क्या कोई ऐसा ईवेंट है जो वर्तमान बदलने से पहले नया मान पास करता है, इसलिए मैं उनकी तुलना कर सकता हूं?डेटाग्रिड व्यू सेल

डेटा अंतर्निहित स्रोत से अद्यतन किया गया है, और बाध्यकारी स्रोत द्वारा बाध्य किया जा सकता है।

उत्तर

20

मैं एक समान मुद्दे में भाग गया। मैं बजाय CellValidating घटना का उपयोग करके इस घेरने की कोशिश की:

void dgv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 
    var oldValue = dgv[e.ColumnIndex, e.RowIndex].Value; 
    var newValue = e.FormattedValue; 
} 

वैसे, मैं पुराने मूल्य के लिए उपयोग सिर्फ जरूरत है, मैं किसी भी स्वरूपण प्रदर्शन करने के लिए जरूरत नहीं थी। मुझे यकीन है कि आप इस घटना हैंडलर के माध्यम से स्वरूपण लागू कर सकते हैं, हालांकि।

0

परिणाम के आधार पर ForeColor की तुलना करने और बदलने के लिए, आप चर के सेल का पुराना मान संग्रहीत कर सकते हैं, फिर चर से पुराने मान को हटा दें।

सम्मान।

+0

मैं इससे बचने की उम्मीद कर रहा था, क्योंकि मुझे कई कॉलम चाहिए, लेकिन यदि यह कोई आसान तरीका नहीं है ... – bretddog

0

यदि डेटाग्रिड व्यू नियंत्रण का आंतरिक स्रोत डेटाटेबल है तो आप DataRowVersion enum का उपयोग करके DataRow के पुराने संस्करण का उपयोग कर सकते हैं। ध्यान दें कि मैंने सेलफॉर्मेटिंग इवेंट का उपयोग किया है।

उदाहरण:

private void DataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    // if NOT the DataGridView's new row 
    if (!this.dataGridView1.Rows[e.RowIndex].IsNewRow) 
    { 
     // if my desired column 
     if (e.ColumnIndex == 0) 
     { 
      TestDataSet.TestRow row; 

      row = (TestDataSet.TestRow)((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem).Row; 

      if (row.Column1, (int)row["Column1", DataRowVersion.Original]) > 0) 
        e.CellStyle.ForeColor = Color.Red; 
     } 
    } 
} 
0

आप DataGridView.CellValueChanged घटना को देखने के लिए चाहते हो सकता है (http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvaluechanged.aspx)।

यदि आप सहेजने से पहले मूल्य की जांच करना चाहते हैं, तो DataGridView.CurrentCellDirtyStateChanged (http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.currentcelldirtystatechanged.aspx) देखें।

+0

बस लिंक पोस्ट करने के बजाय, समाधान के प्रासंगिक भाग को भी आपके उत्तर में पोस्ट करना बेहतर होता है। –

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