2008-10-14 8 views
7

DataGridViewComboBoxColumn में सेल की कॉम्बोबॉक्स स्टाइल ड्रॉपडाउनलिस्ट में सेल की कॉम्बोबॉक्स शैली को कैसे बदलें। इसका मतलब है कि उपयोगकर्ता केवल ड्रॉपडाउन से मूल्यों का चयन कर सकता है। अंतर्निहित नियंत्रण कॉम्बोबॉक्स है, इसलिए इसमें स्टाइल ड्रॉपडाउन हो सकता है। मैं DataGridViewComboBoxColumn में अंतर्निहित कॉम्बो बॉक्स की शैली कैसे बदलूं। या, अधिक सामान्य, क्या मेरे पास डेटाग्रिड व्यू में ड्रॉपडाउन के साथ एक कॉलम हो सकता है जहां उपयोगकर्ता टाइप कर सकता है?DataGridViewComboBoxColumn

उत्तर

4
void dataGridView1_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl)) 
    { 
     DataGridViewComboBoxEditingControl cbo = 
      e.Control as DataGridViewComboBoxEditingControl; 
     cbo.DropDownStyle = ComboBoxStyle.DropDown; 
    } 
} 

Problem with combobox and databound datagridview

+0

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

2

समाधान के बाद काम करता है मुझे

private void dataGridView1_CellValidating(object sender, 
    DataGridViewCellValidatingEventArgs e) 
{ 
    if (e.ColumnIndex == Column1.Index) 
    { 
     // Add the value to column's Items to pass validation 
     if (!Column1.Items.Contains(e.FormattedValue.ToString())) 
     { 
      Column1.Items.Add(e.FormattedValue); 
      dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 
       e.FormattedValue; 
     } 
    } 
} 

private void dataGridView1_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (dataGridView1.CurrentCell.ColumnIndex == Column1.Index) 
    { 
     ComboBox cb = (ComboBox)e.Control; 
     if (cb != null) 
     { 
      cb.Items.Clear(); 
      // Customize content of the dropdown list 
      cb.Items.AddRange(appropriateCollectionOfStrings); 
      cb.DropDownStyle = ComboBoxStyle.DropDown; 
     } 
    } 
} 
+0

दिया अगर हालत हमेशा पता चला है मेरी databounded बता गया में सच हो करने के लिए ... वहाँ एक काम के आसपास है ... किसी स्थिति: ================= ================================================== अगर (! कॉलम 1। इटम्स। कॉन्टैन्स (ई। फॉरमेटेड वैल्यू। टॉस्ट्रिंग())) { कॉलम 1। इटम्स। जोड़ें (ई। फॉरमेटेड वैल्यू); डेटाग्रिड व्यू 1। पंक्तियां [ई। रोइंडेक्स] .ल्स [ई। कॉलम इंडेक्स]। वैल्यू = ई। फॉर्मेटेड वैल्यू; } –

1
if (!Column1.Items.Contains(e.FormattedValue.ToString())) { 
    Column1.Items.Add(e.FormattedValue);  
    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue; 
} 

हमेशा सच वापस आ सकते हैं के लिए, क्योंकि Column1.Items.Contains() String मूल्यों के लिए खोज रहा है। यदि e.FormattedValueString नहीं है तो तुलना विफल हो जाएगी।

if (!Column1.Items.Contains(e.FormattedValue.ToString())) { 
    Column1.Items.Add(e.FormattedValue.ToString());  
    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue.ToString(); 
} 

या

if (!Column1.Items.Contains(e.FormattedValue)) { 
    Column1.Items.Add(e.FormattedValue); 
    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue; 
} 
संबंधित मुद्दे