2011-09-16 15 views
5

मेरे पास एक डेटाग्रिड व्यू है जो रीड-ओनली मोड को सत्य (गैर-संपादन योग्य) पर सेट करता है जो फॉर्म लोड पर डेटाबेस से मान लेता है। जब मैं केवल पढ़ने के लिए मोड को झूठा (संपादन योग्य मोड) पर सेट करता हूं, तो मैं एक विशेष कॉलम (उदाहरण विभाग) को कॉम्बोबॉक्स के रूप में दिखाना चाहता हूं ताकि मैं वहां से मूल्यों का चयन कर सकूं। और जब मैं केवल-पढ़ने के मोड में प्रवेश करता हूं, तो कॉम्बोबॉक्स गायब होना चाहिए और डेटाग्रिड व्यू सामान्य के रूप में दिखाई देना चाहिए। उसकी प्राप्ति कैसे हो? मैं सी # फ्रेमवर्क 4.0 का उपयोग कर रहा हूं, विनफॉर्मसंपादन मोड में डेटाग्रिड व्यू में कॉम्बोबॉक्स

+0

'गायब' से आपका क्या मतलब है? आप चाहते हैं कि पूरा कॉलम छुपाया जाए, या केवल कम्बोबॉक्स अक्षम किया जाए (यानी उपयोगकर्ता कंबोबॉक्स से ड्रॉप डाउन सूची का चयन नहीं कर सकता है? – SwDevMan81

+0

मेरा मतलब है, डेटाग्रिडव्यू अपने सामान्य मोड में है और combobox diappear लेकिन कॉलम नहीं – Sandy

उत्तर

4

ComboBox with read only behavior पर कार्यान्वयन देखें।

संपत्ति के पाठ के अनुसार आप DisplayStyle भी बदल सकते हैं। DisplayStyle से DataGridViewComboBoxDisplayStyle.Nothing को सेट करना ड्रॉप डाउन बटन को छुपाएगा।

उदाहरण के लिए

, एक बटन क्लिक के साथ ReadOnly संपत्ति को बदलने कुछ इस तरह दिखेगा:

private void mChangeReadOnlyButton_Click(object sender, EventArgs e) 
{ 
    ComboBoxColumn2.DisplayStyle = (dataGridView1.ReadOnly) ? 
     DataGridViewComboBoxDisplayStyle.ComboBox : 
     DataGridViewComboBoxDisplayStyle.Nothing; 
    dataGridView1.ReadOnly = !dataGridView1.ReadOnly; 
} 

संपादन योग्य:

Editable http://i51.tinypic.com/5e7o1w.jpg

ReadOnly:

ReadOnly http://i52.tinypic.com/1zgaxyt.jpg

+0

मुझे मेरा समाधान मिला असल में, लेकिन वास्तव में खेद है, मैंने गलती से इसे हटा दिया। और मैंने इसे अभी हटा दिया है। तकलीफ देने के लिए माफ़ी। लेकिन मेरे समाधान में मुझे समस्या का सामना करना पड़ रहा है, जब मेरी rowindex और columnindex समान हैं। आपका समाधान मेरे लिए ठीक काम करता है। धन्यवाद। – Sandy

1

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

public void bgCombo(DataGridView dg) 
{ 
    foreach (DataGridViewRow row in dg.Rows) 
    { 
     DataGridViewComboBoxCell dgc = new DataGridViewComboBoxCell(); 
     dgc.Value = row.Cells["Department"].Value; 
     row.Cells["Department"] = dgc; 
    } 
} 

dataGridCell को DGC सेट करने से पहले हम इसे में आइटम संग्रह जोड़ सकते हैं। आशा करता हूँ की ये काम करेगा।

समस्या: यदि कॉलम और पंक्ति सूचकांक संपादन करते समय समान हो जाता है, तो मुझे एक त्रुटि मिल रही है - ऑपरेशन मान्य नहीं है क्योंकि इसके परिणामस्वरूप SetCurrentCellAddressCore फ़ंक्शन पर पुनर्वित्त कॉल होता है।

+0

मुझे इस पोस्ट से बहुत प्यार है। नेट पर जो कुछ भी मैंने पाया वह लंबे समय तक घुमावदार और भ्रमित था और वास्तव में जो मैं खोज रहा था वह नहीं था। जीवन बचाओ !! :) –

+0

मुझे इस तरह की टिप्पणी करने में खुशी है :) – Sandy

1

चुनी हुई पंक्तियां के लिए एक combobox को छिपाने के लिए चाहते हैं तो आप DataGridViewComboBoxDisplayStyle संपत्ति

विकल्पों ComboBox, DropdownBox हैं या उदाहरण में कोई भी

उपयोग कर सकते हैं - केवल स्तंभ 4 में ComboBox प्रदर्शित अगर वहाँ में एक मूल्य है कॉलम 2

For Each row As DataGridViewRow In dgv.Rows 
     Dim Cell As DataGridViewComboBoxCell = CType(row.Cells(4), DataGridViewComboBoxCell) 
    Cell.ReadOnly = True 
    Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing 
    If row.Cells(2).Value IsNot Nothing Then 
     Cell.ReadOnly = False 
     Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox 
    End If 
Next 
संबंधित मुद्दे