2011-12-04 15 views
6

से मूल्य प्राप्त करते समय System.Data.DataRowView ComboBox में चयनित आइटम के अनुसार डेटाबेस से डेटा प्राप्त करने का प्रयास कर रहा हूं, लेकिन जब मैं चयनित ComboBox आइटम तक पहुंचने का प्रयास करता हूं तो यह मुझे "System.Data.DataRowView देता है "कॉम्बोबॉक्स

मैंने किया था एक और समारोह में एक साधारण चयन क्वेरी के साथ एक ही बात और है कि ठीक काम करता है, लेकिन मैं क्यों यह इस क्वेरी में काम नहीं करता है पता नहीं है [...?]:

_dataAdapter.SelectCommand.CommandText = "SELECT lt.Name FROM Leader as lt LEFT JOIN Material as mt ON lt.Student_id=mt.lead_id where lt.Name=" + "'" + cmbLeader.SelectedItem.ToString() + "'"; 

क्या कोई मुझे बता सकता है कि समस्या क्या हो सकती है?

उत्तर

14

SelectedItem डेटा ऑब्जेक्ट है जो ComboBox के डेटा स्रोत से जुड़ा हुआ है, जो इस मामले में DataRowView है।

आपको SelectedItem से DataRowView पर कास्ट करने की आवश्यकता है, फिर उससे उचित मूल्य पुनर्प्राप्त करें।

आप इस प्रकार कर सकते हैं:

DataRowView oDataRowView = cmbLeader.SelectedItem as DataRowView; 
string sValue = ""; 

if (oDataRowView != null) { 
    sValue = oDataRowView.Row["YourFieldName"] as string; 
} 

तो (अपने CommandText में) की जगह:

cmbLeader.SelectedItem.ToString() 

साथ:

sValue 

इस शान से इस मामले में जहां संभाल लेंगे DataRowView शून्य है।

YourFieldName उपर्युक्त कोड में डेटा स्रोत में फ़ील्ड का नाम होना चाहिए जिसमें नाम मान है। यदि आपने कंबोबॉक्स के DisplayMember या ValueMember गुणों में इस फ़ील्ड का नाम सेट किया है, तो आप इस क्षेत्र का उपयोग करते समय सड़क पर कुछ दिल की धड़कन बचाने के लिए या फिर इस कोड का पुन: उपयोग करना चाहते हैं:

sValue = oDataRowView.Row[cmbLeader.DisplayMember] as string; 

वैकल्पिक रूप से, आप cmbLeader.SelectedValue का उपयोग कर सकते हैं।

+0

मैं SelectedValue का उपयोग कर अभी भी मैं System.Data.DataRowView पाने की कोशिश की, कैसे कर सकते हैं मैं – jarus

+0

thanx DataRowView को SelectedItem से डाली मैं जिस तरह से DataRowView स्ट्रिंग str = ((DataRowView) cmbLeader.SelectedItem) को SelectedItem कास्ट करने के लिए मिला [ "नाम"] ToString()।; – jarus

+0

@jarus: DataRowView को कास्टिंग करने के विवरण के साथ उत्तर अपडेट किया गया। –

1

जब आप एडीओ DataTable से जुड़ते हैं तो आप वास्तव में एडीओ DataView (जो DataRowViews का संग्रह है) से बाध्यकारी हैं। इसका मतलब है कि SelectedItem हमेशा DataRowView होगा।

जुड़े DataRow आप DropDownList के लिए

DataRow row = ((DataRowView)SelectedItem).Row 
0

यह कॉल कर सकते हैं पाने के लिए। कई डेवलपर नीचे दिए गए ड्रॉपडाउन से डेटा सदस्य मूल्य प्राप्त करना चाहते हैं, मूल्य को आसान तरीके से प्राप्त करने में मदद मिलेगी ... यदि कोई सुझाव टिप्पणी नीचे दी गई है!

public string RadDropDownSelectValue(RadDropDownList radDropDownList) 
    { 
     string str = ""; 
     foreach (RadListDataItem item in radDropDownList.SelectedItems) 
     { 
      DataRowView dv = (DataRowView)item.Value; 
      str = dv.Row[0].ToString(); 
     } 
     return str; 
    }