2011-01-20 9 views
22

मैं अपने डेटाग्रिड व्यू में एक सेल को हेरफेर करना चाहता हूं, जब यह मान्य हो रहा है ताकि उपयोगकर्ता उस मान में प्रवेश कर सके जो डेटाबेस के लिए मान्य नहीं है, लेकिन आसानी से वैध डेटा में परिवर्तित हो जाता है, तो प्रोग्राम मूल्य को उचित में बदलें।DataGridView प्रमाणीकरण और बदलना सेल मान

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

 private void unit_List_2_GroupsDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
    { 
     Console.WriteLine("Validating"); 
     DataGridViewColumn col = this.unit_List_2_GroupsDataGridView.Columns[e.ColumnIndex]; 
     DataGridViewCell cell = this.unit_List_2_GroupsDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
     if (col == this.batchDataGridViewTextBoxColumn && this.unit_List_2_GroupsDataGridView.IsCurrentCellInEditMode) 
     { 
      Console.WriteLine(" Batch Column"); 
      DataRow[] rows = label_EntryDataSet.viewJobBatchList.Select(String.Format("Job={0} AND Display='{1}'" 
       , comboBox1.SelectedValue, e.FormattedValue)); 
      if (rows.Length == 1) 
      { 
       Console.WriteLine("  Auto Completed item from list: {0}", rows[0]["Batch"]); 
       //e.Cancel = true; 
       cell.Value = rows[0]["Batch"]; 
       //this.unit_List_2_GroupsDataGridView.EndEdit(); 
      } 
      else 
      { 
       Console.WriteLine("  No Autocomplete!"); 
       int i = 0; 
       if (!int.TryParse(e.FormattedValue.ToString(), out i)) 
       { 
        Console.WriteLine("   Not an integer either"); 
        e.Cancel = true; 
       } 
      } 
     } 
    } 

लाइन है कि cell.Value पढ़ता = पंक्तियों [0] [ "बैच"]; ऐसा नहीं कर रहा है जो मैं उम्मीद करता हूं।

+0

कृपया सही त्रुटि संदेश पोस्ट करें और इंगित करें कि कोड की कौन सी पंक्ति का उल्लेख किया गया है। – David

उत्तर

39

CellValidating घटना DataGridView संपादन मोड छोड़ने से ठीक पहले होती है; यह एक ऐसा ईवेंट है जो संपादन नियंत्रण (DataGridView.EditingControl) से संबंधित/इसमें शामिल है। इस घटना के लिए आपको कभी भी हैंडलर में सेल मान बदलने का प्रयास नहीं करना चाहिए, क्योंकि जब तक आप ईवेंट को रद्द नहीं करते हैं (जिस स्थिति में उपयोगकर्ता संपादन मोड में फंस जाता है), सेल मान संपादन नियंत्रण से तुरंत मूल्य पर सेट होता है घटना खत्म होती है। इसलिए, यह आपके द्वारा हैंडलर में किए गए किसी भी क्रिया को पूर्ववत करता है।

इसके बजाय आपको क्या करना है संपादन नियंत्रण में मूल्य बदलना (घटना को रद्द न करना याद रखना)। उदाहरण के लिए, एक DataGridViewTextBoxCell के लिए, आप अपने समस्याग्रस्त लाइन के बजाय निम्नलिखित का प्रयोग करेंगे:

unit_List_2_GroupsDataGridView.EditingControl.Text = Convert.ToString(rows[0]["Batch"]); 

आप खोजना चाहिए कि इससे आपकी समस्या हल करती है।

+0

वास्तव में मेरे मुद्दे को हल किया। आपका बहुत बहुत धन्यवाद। – Micah

+0

और मेरा। धन्यवाद। –

+0

बस मुझे क्या चाहिए, धन्यवाद! –

3

सामान्य रूप से, जब भी आपको सेल में मान परिवर्तित/परिवर्तित करने की आवश्यकता होती है तो CellParsing ईवेंट का उपयोग करना बेहतर होता है। उस घटना के भीतर से, आप संकेत दे सकते हैं कि उपयोगकर्ता का मान ErrorText सेल या पंक्ति के मान को सेट करके अमान्य है।

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