2010-01-18 15 views
33

प्राप्त करें मुझे वर्तमान में चयनित डेटा को दा डाटाबेस डेटाग्रिड व्यू से प्राप्त करने की आवश्यकता है।डेटाग्रिड व्यू वर्तमान चयनित ऑब्जेक्ट

मुझे वर्तमान चयनित सेल की वस्तु की आवश्यकता नहीं है, लेकिन जिस वस्तु पर पूरी पंक्ति आधारित है, इस मामले में एक व्यवसाय ऑब्जेक्ट जो गुण ग्रिड के कॉलम बनाते हैं।

मैं डेटासोर्स पर जा सकता हूं, लेकिन यह स्वयं ही एक वस्तु है और यह बाध्यकारी स्रोत या आईबींडिंगलिस्ट या ऐसा कुछ हो सकता है - इसलिए वांछित वस्तु प्राप्त करने के लिए आसान स्टैंडराइज्ड तरीका नहीं है।

इसके पीछे व्यवसाय की जांच करने की आवश्यकता है IChanged नामक संपत्ति के लिए ऑब्जेक्ट करें और उपयोगकर्ता को अगले आइटम का चयन करने से पहले परिवर्तनों को सहेजने या त्यागने के लिए कहें। इसलिए मुझे डेटाग्रिड व्यू के RowValidating-Event के अंदर वर्तमान ऑब्जेक्ट को अवश्य पता होना चाहिए, क्योंकि बाध्यकारी स्रोत परिवर्तन से पहले बदलना बंद करने के लिए कोई ईवेंट नहीं देता है। See here for the well known problem

;-)

उत्तर

69

DataGridViewRow.DataBoundItem 'व्यापार' वस्तु यह स्वाभाविक है शामिल हैं पढ़ने के लिए धन्यवाद।

+4

करना चाहिए चाहते हैं, तो आपको यह

yourDGV.CurrentCell.Value; 

तरह चयनित सेल मूल्य प्राप्त कर सकते हैं मुझे सही तरीके से संकेत देने के लिए धन्यवाद, कभी-कभी किसी को और अधिक तीव्रता से खोज करने की बजाय आराम करना चाहिए और आराम करना चाहिए ... –

+1

यह डेटा कैशिंग करने और फिर उपयोग करने की कोशिश करने से काफी बेहतर है ई चयनित सूचकांक। धन्यवाद! – styfle

+0

बस उल्लेख करना चाहते हैं, यह भी काम करता है, अगर आपका डेटा ग्रिड डेटा को 'बाध्य' नहीं है, बल्कि इसके बजाय यदि आपने इसे 'डेटासोर्स' द्वारा लागू किया है – copa017

6

यहाँ मेरी कोड अपने व्यक्ति वर्ग

public static explicit operator Person(DataRow dr) 
    { 
     Person p = new Person(); 
     p.adi = dr.ItemArray[0].ToString(); 
     p.id = Int32.Parse(dr.ItemArray[1].ToString()); 
     p.soyadi = dr.ItemArray[2].ToString(); 
     p.kartNo = dr.ItemArray[3].ToString(); 
     p.dogumTarihi = DateTime.Parse(dr.ItemArray[4].ToString()); 
     p.adres = dr.ItemArray[5].ToString(); 
     p.meslek = dr.ItemArray[6].ToString(); 
     p.telefon = dr.ItemArray[7].ToString(); 
     p.gsm = dr.ItemArray[8].ToString(); 
     p.eposta = dr.ItemArray[9].ToString(); 

     return p; 
    } 

में डाल रहा है और इस एक अद्यतन बटन पर क्लिक करें है

DataRow row = (dataGridView1.SelectedRows[0].DataBoundItem as DataRowView).Row; 
Person selected = (Person)row; 
0

क्या इस तरह के बारे में?

foreach (DataGridViewRow item in this.dataGridView1.SelectedRows) 
{ 
    MessageBox.Show(item.Cells[0].Value.ToString()); 
} 

हम कई चयनित पंक्ति डेटा प्राप्त कर सकते हैं।

0

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

यदि आप बाध्यकारी स्रोत का उपयोग कर डेटाबेस हैं - तो आप अपने बाध्यकारी स्रोत की CurrentChanged, CurrentItemChanged घटनाओं को कैप्चर कर सकते हैं, तो आपको अपने बीओ पर अतिरिक्त IsChanged प्रॉपर्टी की आवश्यकता नहीं है। .., अंतर्निहित डेटासोर्स भी संशोधित इंगित कर सकता है - उदाहरण के लिए यदि आपके पास बाध्यकारी स्रोत एक डेटाटेबल से जुड़ा हुआ है तो पंक्ति आपको एक संशोधित ध्वज देगी।

1

आप एक स्ट्रिंग के रूप में मूल्य सिर्फ इस

yourDGV.CurrentCell.Value.toString(); 

तरह toString का उपयोग इस यह

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