2010-04-29 15 views
6

से पंक्ति का चयन करें मेरे पास डेटाग्रिड व्यू (3 कॉलम) और एक बटन के साथ एक फॉर्म है। प्रत्येक बार जब उपयोगकर्ता बटन पर क्लिक करता है, तो मैं उस पंक्ति के पहले कॉलम में संग्रहीत मान प्राप्त करना चाहता हूं।सी #: डेटाग्रिड व्यू

यहाँ कोड मैं है:

private void myButton_Click(object sender, EventArgs e) 
    { 
     foreach (DataGridViewRow row in ProductsGrid.Rows) 
     { 
      if (this.ProductsGrid.SelectedRows.Count == 1) 
      { 
      // get information of 1st column from the row 
      string value = this.ProductsGrid.SelectedRows[0].Cells[0].ToString(); 
      } 
     } 
    } 

हालांकि जब मैं myButton पर क्लिक करें, this.ProductsGrid.SelectedRows.Count इसके अलावा 0. है, मैं कैसे सुनिश्चित करते हैं कि उपयोगकर्ता का चयन करता है केवल एक पंक्ति और एकाधिक पंक्तियों नहीं? क्या यह कोड सही दिखता है?

+1

आप डेटा ग्रिड के सभी पंक्तियों पर (foreach) पुनरावृत्ति करने के लिए केवल पहले SelectedRow प्राप्त करने की आवश्यकता नहीं है का उपयोग कर सकते हैं। फोरैच लूप यहां समय की बर्बादी है। –

उत्तर

23

सेट DataGridView.MultiSelect = झूठी और DataGridView.SelectionMode = FullRowSelect। यह ऐसा करेगा ताकि उपयोगकर्ता एक समय में केवल एक पंक्ति का चयन कर सके।

+2

मुझे डेटा GridView1 का उपयोग करना पड़ा था। चयन मोड = DataGridViewSelectionMode.FullRowSelect; – mack

1

चयनित पंक्तियां केवल पंक्तियों को वापस लाती हैं यदि पूरी पंक्ति का चयन किया जाता है (यदि आप चाहें तो डेटाग्रिडव्यू पर रोसेलेक्ट चालू कर सकते हैं)। बेहतर विकल्प खैर SelectedCells

private void myButton_Click(object sender, EventArgs e) 
{ 
    var cell = this.ProductsGrid.SelectedCells[0]; 
    var row = this.ProductsGrid.Rows[cell.RowIndex]; 
    string value = row.Cells[0].Value.ToString(); 
} 
1

साथ जाने के लिए है, तो आप दोनों अपने ग्रिड में सभी पंक्तियों पर पुनरावृति और SelectedRows के संग्रह का उपयोग करने की जरूरत नहीं है।

SelectionMode संपत्ति SelectedRows संपत्ति के लिए FullRowSelect को या RowHeaderSelect सेट किया जाना चाहिए चयनित पंक्तियों की जगह ले रहे हैं: आप iteratating छोड़ सकते हैं और SelectedRows संग्रह का उपयोग करते हैं, तो आपकी समस्या को शायद कोई गलत SelectionMode है।

(MSDN से)

0

SelectedRows.Count पूरे पंक्तियों है कि वर्तमान में चयन किया जाता है की संख्या देता है। आप शायद SelectedCells.Count का उपयोग करना चाहते हैं।

1

आप ग्रिड एक सरणी के लिए इसी तरह देख सकते हैं:

ProductsGrid[ProductsGrid.SelectedColumns[0].Index, ProductsGrid.SelectedRows[0].Index].Value; 

SelectedRowsCollection और SelectedColumnsCollection आप पहली बार मूल्य हड़पने देंगे यदि एक से अधिक पंक्तियां चयनित हैं के पहले सूचकांक से अनुक्रमित का चयन करके।


आप DataGridView पर MultiSelect संपत्ति की स्थापना द्वारा केवल एक ही पंक्ति का चयन करने के लिए उपयोगकर्ता लॉक कर सकते हैं। वैकल्पिक रूप से आप CellClick घटना प्रदर्शन करने के:

ProductsGrid.ClearSelection(); 
ProductsGrid.Rows[e.RowIndex].Selected = true; 
संबंधित मुद्दे