2010-11-01 18 views
9

मेरे पास डेटाग्रिड व्यू है। मैं अपने ही वस्तुओं का एक BindingList होने के लिए अपनी .DataSource प्रोप सेट: एक BindingList<IChessItem>सशर्त डेटाग्रिड व्यू स्वरूपण

मैं तो इसके लिए कुछ कॉलम बनाया ..

DataGridViewTextBoxColumn descColumn = new DataGridViewTextBoxColumn(); 
    descColumn.DataPropertyName = "Description"; 
    descColumn.HeaderText = "Description"; 
    descColumn.Width = 300; 

    DataGridViewTextBoxColumn gameIDColumn = new DataGridViewTextBoxColumn(); 
    gameIDColumn.DataPropertyName = "GameID"; 
    gameIDColumn.HeaderText = "Game ID"; 
    gameIDColumn.Width = 60; 

    dataGrid.Columns.Add(descColumn); 
    dataGrid.Columns.Add(gameIDColumn); 

मेरा प्रश्न है .. मैं स्तंभों में से एक रंग करने के लिए चाहते हैं मेरी बाध्यकारी सूची के दूसरे क्षेत्र में डेटा के आधार पर ग्रीन)। मैं यह कैसे कर सकता हूँ?

मैं वास्तव में इस क्षेत्र को दिखाने के लिए की जरूरत नहीं है, मैं सिर्फ यह में डेटा पर कार्रवाई करना चाहते हैं ..

मेरे मामले में

, IChessItem के क्षेत्रों में से एक से पता चलता है कि क्या रिकॉर्ड नया है, और मैं इसे प्रतिबिंबित करने के लिए डेटाग्रिडव्यू में अन्य फ़ील्ड को रंगना चाहते हैं।

उत्तर

21

आप डेटाग्रिड व्यू के 'सेलफॉर्मेटिंग' ईवेंट का उपयोग कर सकते हैं। DataGridViewCellFormattingEventArgs में पंक्ति के अनुक्रमणिका और वर्तमान सेल के कॉलम को बाध्य किया जा रहा है। मुझे आशा है कि मेरे कोड उदाहरण आप के लिए कुछ समझ में आता है:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    // Compare the column to the column you want to format 
    if (this.dataGridView1.Columns[e.ColumnIndex].Name == "ColumnName") 
    { 
     //get the IChessitem you are currently binding, using the index of the current row to access the datasource 
     IChessItem item = sourceList[e.RowIndex]; 
     //check the condition 
     if (item == condition) 
     { 
      e.CellStyle.BackColor = Color.Green; 
     } 
    } 
} 
+0

दिलचस्प। ऐसा लगता है कि इसे काम करना चाहिए, दुर्भाग्यवश, this.dataGridView1.Columns [e.ColumnIndex]। जब भी यह यहां आता है। " ऐसा लगता है * * काम करना चाहिए। – KevinDeus

+0

ओकॉम .. मुझे इसे डाटाप्रोपर्टी नाम का उपयोग करके काम करने के लिए मिला (क्योंकि यह ऊपर मेरे कोड में स्थापित किया गया था), और इसे डेटाग्रिड आइटम पर वापस इंगित करता है (क्योंकि मेरे सोर्सिलिस्ट को इस बिंदु से मिटा दिया गया है ..) IChessItem item = ((बाइंडिंगलिस्ट ) this.dgvAvailableMoves.DataSource) [e.RowIndex]; – KevinDeus

+2

कॉलम नाम की जांच करने के बजाय कॉलम पर सीधे तुलना करने के लिए एक और मजबूत दृष्टिकोण है, यानी 'if (dataGridView.Columns [e.ColumnIndex] == dataGridViewColumnXXX) ...' –

0

आप किसी भी पाश या डेटा स्रोत का उपयोग कर अपने DataGridView में डेटा को पॉप्युलेट कर सकते हैं। फिर DataGridView1 में प्रत्येक DataGridViewRow के लिए। पंक्तियों ----

चॉक रेफ मान ypu chk करना चाहते हैं और फिर डेटाग्रिडव्यूसेल [अनुक्रमणिका] .style.backColor प्रॉपर्टी सेट करें।

+5

कृपया फ़ॉर्मेट करने के लिए इस तरह से न जाएं कोशिकाएं - यदि आपके पास 10000 पंक्तियां x 20 कॉलम हैं, तो आप 200000 कोशिकाओं की जांच करेंगे। दूसरी ओर, यदि आप सेलफॉर्मेटिंग ईवेंट का उपयोग करेंगे, तो आप केवल दृश्यमान कक्षों के लिए स्वरूपण कर रहे हैं (जो तेज़ तेज़ है)। – zeroDivisible

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