2009-06-22 18 views
9

मुझे DataGridView में चयनों को संभालने में समस्या हो रही है। मेरे ग्रिड व्यू में एक राशि कॉलम है। फ़ॉर्म पर एक टेक्स्टबॉक्स है जो चयनित ग्रिड व्यू पंक्तियों की कुल राशि प्रदर्शित करना चाहिए। इसलिए मुझे घटनाओं को कैप्चर करने की आवश्यकता होती है जब उपयोगकर्ता ग्रिडव्यू पंक्तियों का चयन/चयन रद्द करता है और उसके अनुसार राशि को जोड़ता है (घटाता/घटाता है)।डेटाग्रिड व्यू उपयोगकर्ता पंक्ति चयन कैप्चरिंग

  1. RowEnter और RowLeave घटनाओं का उपयोग करना: मैं दो यह कर के तरीकों मिल गया है। यह काम ठीक है जब उपयोगकर्ता एक पंक्ति का चयन/चयन रद्द करता है। हालांकि, जब उपयोगकर्ता एक बार में कई पंक्तियों का चयन कर रहा है, तो ईवेंट केवल अंतिम पंक्ति के लिए निकाल दिया जाता है। इसलिए, मेरी कुल राशि से केवल अंतिम पंक्ति में राशि को जोड़ा/घटाया जाता है। इस प्रकार मेरा परिणाम गलत बना रहा है।

  2. RowStateChanged ईवेंट का उपयोग करना। यह कई पंक्तियों के लिए काम करता है। हालांकि, यदि डेटा डेटाग्रिड के माध्यम से स्क्रॉल करता है तो ईवेंट को निकाल दिया जाता है।

क्या किसी ने इस तरह के परिदृश्य को संभाला है। मैं जानना चाहता हूं कि मुझे कौन सी डाटाग्रिड घटना का उपयोग करना चाहिए, ताकि मेरा कोड तभी निष्पादित हो जब उपयोगकर्ता कई पंक्तियों सहित पंक्तियों का चयन/चयन रद्द कर लेता है।

उत्तर

15

समाधान मिला। मैं RowStateChanged का उपयोग करें और मेरे कोड चल ही अगर पंक्ति के लिए StateChangedSelected है सकते हैं ...

private void dgridv_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) 
{ 
    // For any other operation except, StateChanged, do nothing 
    if (e.StateChanged != DataGridViewElementStates.Selected) return; 

    // Calculate amount code goes here 
} 
0

आप SelectedRows संपत्ति के साथ अपनी पहली विधि (पंक्ति पंक्ति पंक्ति दर्ज करें) का उपयोग कर सकते हैं। मतलब, जब आप उन घटनाओं का पता लगाते हैं, और आपको गणना करने की आवश्यकता होती है, घटना तर्क से पंक्ति का उपयोग करने के बजाय, चयनित पंक्तियों के माध्यम से लूप करें और अपना कुल प्राप्त करें।

+0

मैं ऐसा नहीं कर सकते, क्योंकि मैं उन रिकॉर्ड जो शुरू में चयन किया गया था और अब चयनित नहीं हैं से राशि घटाना करने की जरूरत है: टी या घटना CellValueChanged। –

2

आप बस निम्नलिखित तरीके से इस पर कब्जा कर सकते हैं, लेकिन यह केवल एक पंक्ति चयन तक ही सीमित है:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    MessageBox.Show("Selected row is=" + e.RowIndex); 
    // you can perform (any operation) delete action on selected row like 

    dataGridView1.Rows.RemoveAt(e.RowIndex); 
    dataGridView1.Refresh(); 
} 
+1

जब उपयोगकर्ता कीबोर्ड – Alireza

2

मुझे लगता है कि आप SelectionChanged घटना पर विचार कर सकते हैं:

private void DataGridView1_SelectionChanged(object sender, EventArgs e) { 
    textbox1.Text = DataGridView1.SelectedRows.Count.ToString(); 
} 
2

मैं उपयोग भी SelectionChanged ,

 dtGrid.SelectionChanged += DataGridView_SelectionChanged; 
     this.dtGrid.DataSource = GetListOfEntities; 
     dtGrid.CellValueChanged += DataGridView_CellValueChanged; 


    private void DataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
    { 
     DataGridViewRow row = dtGrid.Rows[e.RowIndex]; 
     SetRowProperties(row); 
    } 

    private void DataGridView_SelectionChanged(object sender, EventArgs e) 
    { 
     var rowsCount = dtGrid.SelectedRows.Count; 
     if (rowsCount == 0 || rowsCount > 1) return; 

     var row = dtGrid.SelectedRows[0]; 
     if (row == null) return; 
     ResolveActionsForRow(row); 
    } 
+0

के साथ पंक्ति में प्रवेश करता है तो पर्याप्त नहीं है SetRowProperties क्या है? – John

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