2009-11-04 12 views
5

"पंक्तियों कोशिकाओं का चयन किया है की अनुक्रमणिका" वापस जाने के लिए एक DataGridView पूछने के लिए साफ तरीका क्या है की पंक्ति इंडेक्स ढूँढना? यह DataGridView.SelectedRows के समान नहीं है। मैं पंक्ति या कॉलम चयन की अनुमति नहीं देता हूं। तो उपयोगकर्ताओं को कोशिकाओं के ब्लॉक का चयन करना होगा। मुझे बस यह पता लगाने की जरूरत है कि कौन सी पंक्तियों ने उनमें सेल्स का चयन किया है।सी # - DataGridView और SelectedCells - चयनित सेल

वहाँ कुछ चालाक लैम्ब्डा अभिव्यक्ति मैं का उपयोग करना चाहिए है? आप क्या करेंगे? कोड मैं मैं पहले से ही DataGridView से विरासत में मिला है और मैं अपने स्वयं के कस्टम वर्ग DataGridViewExt में हूँ लिख रहा हूँ में :

इस मदद करता है, तो

+0

मैं की तरह वहाँ है कि मैं क्या करना चाहिए LINQ वाक्य रचना में चयन DISTINCT किसी तरह का होना चाहिए लग रहा है। – BuddyJoe

+0

क्या करना चाहिए या कर सकता है? –

+0

होना चाहिए - इस अर्थ में कि कोई और अब इस कोडबेस को एक वर्ष का समर्थन करेगा ... और यदि मैं 3 से 5 की बजाय 1 लाइन में इरादा का वर्णन कर सकता हूं जो इस परियोजना के लिए बेहतर होगा। – BuddyJoe

उत्तर

9

LINQ समाधान:

var rowIndexes = dgv.SelectedCells.Cast<DataGridViewCell>() 
            .Select(cell => cell.RowIndex) 
            .Distinct(); 

संपादित करें:

तुम बस कास्ट लापता हैं। क्योंकि DataGridViewSelectedCellCollection एक सामान्य IEnumerable<DataGridViewCell>, बस IEnumerable को लागू नहीं करता है यह आवश्यक है, इसलिए जब आप मान की गणना, वे प्रकार Object के हैं। कलाकारों के साथ, कि देना होगा:

int[] rowIndexes = (from sc in this.SelectedCells.Cast<DataGridViewCell>() 
        select sc.RowIndex).Distinct().ToArray(); 
+0

कमाल! +1 और उत्तर। सिर्फ उत्सुक है लेकिन वैकल्पिक वाक्यविन्यास क्या होगा? मैं कहीं ऊपर फिसल गया: int [] rowIndexes = (इस में एससी से। चयनित Cells Sc.RowIndex का चयन करें)। डिस्टिंक()। ToArray(); क्या आप इसे उत्तर में जोड़ सकते हैं? – BuddyJoe

+0

मैंने अपना जवाब संपादित किया। –

+0

आह ठीक है। LINQ और .Cast <>() पर एक लेख या दो पढ़ने की आवश्यकता है। धन्यवाद। – BuddyJoe

1
IEnumerable<int> indexes = 
(from c in dataGridView1.SelectedCells.Cast<DataGridViewCell>() 
    select c.RowIndex).Distinct(); 
संबंधित मुद्दे