2008-10-07 14 views
5

मैं वीएस 2008/सी # का उपयोग कर रहा हूं और डेटाग्रिड व्यू नियंत्रण के लिए डेटासोर्स के रूप में सहायक वर्गों की एक स्थानीय सूची बाध्यकारी हूं। मेरी सहायक सूची की सूची पर निकालें() विधि को कॉल करना डेटाग्रिड व्यू के सेलफॉर्मेटिंग ईवेंट को सक्रिय करता है, जो समझ में आता है (थोड़ा)।अंतिम पंक्ति डेटाबेस हटाएं डेटाग्रिड व्यू सी #

ग्रिड में आखिरी पंक्ति के डेटाबाउंडइटम के होने पर जो कुछ भी होता है उसे हटाते समय (जब तक ग्रिड में एक से अधिक पंक्ति होती है) डेटाग्रिड व्यू के पंक्ति संग्रह को इस घटना से पहले अपडेट नहीं किया जाता है। तो, सेलफॉर्मेटिंग इवेंट हैंडलर में, मुझे इंडेक्सऑटऑफेंजेंज एक्सेप्शन मिलता है क्योंकि पंक्ति संग्रह एक बहुत बड़ा है।

मैंने DataGridView.Rows.Remove() विधि का उपयोग करके पंक्ति को हटाने का प्रयास किया है, और सीधे डेटा स्रोत के रूप में सूची को बाध्य करने के बजाय बाध्यकारी स्रोत का उपयोग करके बाध्यकारी है।

मुझे Google के माध्यम से इस अवसर के कुछ संदर्भ मिले, लेकिन उत्तर या तो आने वाले नहीं थे या डेटाग्रिड व्यू या DataGridView.Rows संग्रह पर हटाएं() विधि का उपयोग करने के लिए कहा गया था - इनमें से कोई भी वर्तमान में मौजूद नहीं है।

सॉर्टिंग एक ही परिणाम में ऐसा नहीं होता है, जैसा कि एक ही परिणाम में प्रदर्शन/प्रदर्शन नहीं करता है।

हटाने के लिए समस्या होने वाली "आखिरी पंक्ति" का एकमात्र अपवाद यह है कि यदि डेटाग्रिड व्यू में केवल एक पंक्ति होती है - जिसमें मामला ठीक काम करता है।

उत्तर

10

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

वैकल्पिक रूप से, आप अपने डेटा ग्रिडव्यू पर डेटाइरर ईवेंट को संभाल सकते हैं और विधि में आप अपवाद को दबाने के लिए e.Cancel = true कह सकते हैं, या आप इससे आगे निपट सकते हैं।

+0

संग्रह करने के लिए शून्य और वापस काम करने के लिए सेटिंग काम किया। – Pat

+0

इसे पागल पुराने प्रश्न पर छोड़कर उत्तर के रूप में फ़्लैग करना। :-) मेरा मानना ​​है कि मैंने उस समय कोई सफलता के साथ सुझाव की कोशिश की थी। लेकिन ऐसा लगता है कि दूसरों के लिए काम किया है। –

0

यह एक बहुत पुरानी समस्या है, लेकिन मैंने इसे पंक्ति-निकालने की घटना को संभालने के द्वारा हल किया है।

private void dgViewItems_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e) 
{ 
    dataAdapter.Update((DataTable)bindingSource1.DataSource); 
} 

और यह काम किया।

0

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मुझे एक और समाधान मिला जो मेरे लिए काम करता था। डेटा स्रोत/बाध्यकारी स्रोत से आइटम को हटाने से पहले, सेलफॉर्मेटिंग ईवेंट के लिए इवेंट हैंडलर को अन-तार करें और उसके बाद इसे फिर से तार दें। उदाहरण के लिए:

RemoveHandler DataGridView1.CellFormatting, AddressOf DataGridView1_CellFormatting 
Me.BindingSource1.Remove(item) 
AddHandler DataGridView1.CellFormatting, AddressOf DataGridView1_CellFormatting 
0

मुझे एक ही समस्या है। मुझे एक समाधान मिला है। सभी पंक्तियों को अगली पंक्ति में कॉपी करने का प्रयास करें। फिर डीजीवी की पहली पंक्ति को हटा दें। इस के लिए एक नमूना कोड:

If Dgv.CurrentCell.RowIndex + 1 = Dgv.Rows.Count Then 
     For m = Dgv.Rows.Count - 2 To 0 Step -1 
      Dgv.Rows(m + 1).Cells(0).Value = Dgv.Rows(m).Cells(0).Value 
      Dgv.Rows(m + 1).Cells(1).Value = Dgv.Rows(m).Cells(1).Value 
      Dgv.Rows(m + 1).Cells(2).Value = Dgv.Rows(m).Cells(2).Value 
      Dgv.Rows(m + 1).Cells(3).Value = Dgv.Rows(m).Cells(3).Value 

     Next 
     Dgv.Rows.RemoveAt(0) 
     Exit Sub 
    End If 
    Dgv.Rows.Remove(Dgv.CurrentRow) 

यह :) कोशिश

2

अंतिम पंक्ति छुपाने के लिए, DataGridView की AllowUserToAddRows संपत्ति दिखाया गया है बदलने के लिए:

myDataGridView1.AllowUserToAddRows = false 
1

पहले बस की संपत्ति को निष्क्रिय Datagridview रूप

dataGridView1.AllowUserToAddRows = false; 

और फिर बस के रूप में आप ई चाहते पिछले पंक्तियों के रूप में कई पंक्तियों को दूर -1 रखकर लूप के साथ ither।

dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Count - 1); 
dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Count - 1); 
संबंधित मुद्दे