2009-05-21 21 views
18

मेरे पास DataGridView से डेटाटेबल बाध्य है। मेरे पास डीजीवी में पूर्ण RowSelect सक्षम है। क्या चयनित पंक्ति को डेटारो के रूप में प्राप्त करने का कोई तरीका है ताकि मैं चयनित पंक्ति के मूल्यों तक दृढ़ता से टाइप की गई पहुंच प्राप्त कर सकूं?मैं DataGridView में चयनित डेटारो कैसे प्राप्त करूं?

उत्तर

7

मैं यह कैसे डब्ल्यू/BindingSource oa करने के लिए यकीन नहीं है, तो यहां आपको एक साथ यह करने के लिए है:

var drv = bindingSoure1.Current as DataRowView; 
if (drv != null) 
    var row = drv.Row as MyRowType; 
1

आप सीधे दृढ़ता से टाइप किया पंक्ति में अपने चयनित पंक्ति कास्ट करने के लिए सक्षम होना चाहिए कि DataGridView के लिए बाध्य था।

23
DataRowView currentDataRowView = (DataRowView)dgv1.CurrentRow.DataBoundItem 
DataRow row = currentDataRowView.Row 
+0

एचएम ... मेरे लिए चयनित पंक्ति में «DataBoundItem» शून्य है। –

+2

@ हाय-एंजेल आप डेटा बाइंडिंग का उपयोग नहीं कर रहे हैं, फिर। – stuartd

3

यह निम्न संपत्ति हो रही द्वारा संभव है: DataGridViewSelectedRowCollection:

this.dataGridView.SelectedRows 

एक प्रकार का एक संग्रह प्राप्त करता है। इसमें प्रकार के आइटम शामिल हैं: DataGridViewRow

फिर एक निम्नलिखित तरीके से लोगों को स्वयं के प्रकार के साथ bounditem प्राप्त कर सकते हैं:

DataGridViewSelectedRowCollection list = this.dataGridViewInventoryRecords.SelectedRows; 
MyType selectedItem = (MyType)list[0].DataBoundItem; //[0] ---> first item 
0

आप इस प्रयास करें।

DataRow row = gridView1.GetDataRow(gridView1.FocusedRowHandle);
if (row != null) { XtraMessageBox.Show(row["ID"].ToString()); } else return;

0

आप एक मेज या देखने के लिए अपने DataGridView बाध्य है एक डेटाबेस में, आप एक जोरदार टाइप वस्तु के रूप में बाहर डेटा प्राप्त कर सकते हैं।

यह उत्तर विंडोज़ फॉर्म के लिए है जो डिज़ाइन समय पर डेटासेट का उपयोग कर डेटाबेस से कनेक्ट होता है। उदाहरण का नाम डेटासेट 1 है, और उदाहरण तालिका का नाम ग्राहक_इन्फो है।

// cast the data bound item to DataRowView so you have 
// access to "Row", which 
// has the actual data for the row in typed fields. 
DataRowView drv = dgv.SelectedRows(0).DataBoundItem as DataRowView; 
// run the code and look at the debugger value of drv.Row -- 
// the type will be shown 
// which is the type created by the data binding, representing 
// your table or view 
//{YourDataSetName.YourTableOrViewType} tmpTableData = drv.Row as {YourDataSetName.YourTableOrViewType}; 
DataSet1.Customer_InfoRow tmpTableData = drv.Row as DataSet1.Customer_InfoRow; 

यह लिंक उत्तर है। मुझे उम्मीद है कि मैंने स्पष्टता और ऊपर एक उदाहरण जोड़ा है। https://social.msdn.microsoft.com/Forums/windows/en-US/f252e395-58e6-4703-ba7b-0740efcbecf3/can-i-convert-the-selected-row-in-a-bound-datagridview-to-a-typed-datarow?forum=winformsdatacontrols

यह लिंक डेटा स्रोत में डेटा प्रोग्रामेटिक रूप से जोड़ा गया डेटा दिखाता है, जो उस डेटा को किसी मौजूदा डेटाबेस से नहीं खींचता है। इससे मुझे जवाब के रास्ते का हिस्सा मिला: https://msdn.microsoft.com/en-us/library/4wszzzc7(v=vs.110).aspx

0

डेटासेट के अंदर कोई टेबलडैप्टर उपयोग नहीं किया जा रहा है, तो डेटाग्रिडव्यू तक दृढ़ता से टाइप करना संभव नहीं है।

जब एक DataGridView एक bindingsource के माध्यम से एक datatable के लिए बाध्य है दृढ़ता से चर टाइप किया की पहुंच है, के रूप में पालन करने के लिए:

एक नया प्रोजेक्ट बनाएँ।

डीएस 1 नामक डेटासेट डालें और डेटाटेबल नामित डेटाटेबल नामक कॉलम के साथ डेटाकॉल 1 और डेटा कॉलम 2 नामक कॉलम के साथ डालें।

enter image description here

मुख्य फार्म के लिए एक DataGridView जोड़ें और dt99 को यह बाँध

enter image description here

ताकि dt99BindingSource DataGridView और datatable

enter image description here

जोड़ता है चयन परिवर्तन के लिए जोड़ें और ईवेंट हैंडलर DataGridView, और कोड

निजी शून्य dataGridView1_SelectionChanged (वस्तु प्रेषक, EventArgs ई) {

ds1.dt99Row d= ((ds1.dt99Row)((DataRowView)dt99BindingSource.Current).Row); 

    Debug.WriteLine(d.DataColumn1 + " " + d.DataColumn2); 

}

अब आप दृढ़ता से टाइप किया है चर (d.DataColumn1 और घ का निम्न भाग सम्मिलित DataColumn2) डेटाग्रिडव्यू

पर चयनित कोशिकाओं तक पहुंचने के लिए एक और दिलचस्प विशेषता यह है कि डेटासेट के अंदर डाली गई एक डाटाटेबल सार्वजनिक कक्षाओं का एक सेट प्रदान करती है जो बहुत मदद करती है डेटाटेबल्स को संभालने पर, उदाहरण के लिए

 private void Form1_Load(Object sender, EventArgs e) 
    { 
     ds1.dt99.Adddt99Row("K", "B"); 
     ds1.dt99.Adddt99Row("L", "D"); 
     ds1.dt99.Adddt99Row("M", "F"); 
     ds1.dt99.Adddt99Row("N", "H"); 

     ds1.dt99Row dr = ds1.dt99.Newdt99Row(); 
     dr.DataColumn1 = "X"; 
     dr.DataColumn2 = "Y"; 
     ds1.dt99.Adddt99Row(dr); 

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