2010-09-15 12 views
20

मेरे डब्ल्यूपीएफ कॉम्बोबॉक्स में केवल टेक्स्ट प्रविष्टियां हैं। उपयोगकर्ता एक का चयन करेगा। चयनित कॉम्बोबॉक्स Item का पाठ प्राप्त करने का सबसे आसान तरीका क्या है? कृपया सी # और विजुअल बेसिक दोनों में जवाब दें। यहां मेरा कॉम्बोबॉक्स है:चयनित टेक्स्ट प्रविष्टि वाले कॉम्बो बॉक्स में चयनित टेक्स्ट प्राप्त करने का सबसे आसान तरीका क्या है?

<ComboBox Name="cboPickOne"> 
    <ComboBoxItem>This</ComboBoxItem> 
    <ComboBoxItem>should be</ComboBoxItem> 
    <ComboBoxItem>easier!</ComboBoxItem> 
</ComboBox> 

वैसे, मुझे जवाब पता है लेकिन यह ढूंढना आसान नहीं था। मैंने सोचा कि मैं दूसरों की मदद करने के लिए सवाल पोस्ट करूंगा। संशोधन: मैंने एक बेहतर जवाब सीखा है। एक कॉम्बोबॉक्स विशेषता के रूप में SelectedValuePath = "सामग्री" जोड़कर मुझे अब बदसूरत कास्टिंग कोड की आवश्यकता नहीं है। नीचे एंडी का जवाब देखें।

+1

यदि आप उत्तर जानते हैं, तो इसे भी पोस्ट करने के लिए स्वतंत्र महसूस करें और इसे स्वीकृत उत्तर के रूप में चिह्नित करें। दूसरों को दो बार एक ही शोध करने की आवश्यकता नहीं है। ;-) और कौन जानता है, शायद कोई आपके काम के आधार पर बेहतर समाधान के साथ आ सकता है ... – Heinzi

+0

उस टिप्पणी को जोड़कर, आप आसानी से अपना प्रश्न समुदाय विकी के रूप में चिह्नित कर सकते थे। –

उत्तर

43
<ComboBox 
    Name="cboPickOne" 
    SelectedValuePath="Content" 
    > 
    <ComboBoxItem>This</ComboBoxItem> 
    <ComboBoxItem>should be</ComboBoxItem> 
    <ComboBoxItem>easier!</ComboBoxItem> 
</ComboBox> 

कोड में:

stringValue = cboPickOne.SelectedValue.ToString() 
+6

जितना मैं इसे स्वच्छ और सरल होना चाहता हूं, वह अकेला काम नहीं करता है। चयनित वैल्यू एक कॉम्बोबॉक्स इटैम देता है, न कि जिस स्ट्रिंग वैल्यू को मैं ढूंढ रहा हूं। चयनित वैल्यू के बाद ToString रखना इस सिस्टम को देता है। Windows.Controls.ComboBoxItem: चयनित पाठ के बाद। – DeveloperDan

+3

ठीक है। मुझे लगता है कि आपने कॉम्बोबॉक्स में एक विशेषता के रूप में SelectedValuePath = "Content" को जोड़ा है। यह काम करता है! कोई बदसूरत कास्टिंग की आवश्यकता नहीं है। यह अच्छा, साफ और सरल है - बस मैं चाहता था। धन्यवाद एंडी! – DeveloperDan

+0

आप चुनिंदा वैल्यू से भी बाध्य हो सकते हैं। पथ के रूप में सामग्री, यह बाध्यकारी लक्ष्य की आवश्यकता से कॉम्बोबॉक्स का व्यवहार decouples। – Sprague

0

आप पहले से ही पता है कि आपके ComboBoxItem की सामग्री के केवल तार होने जा रहे हैं, तो बस स्ट्रिंग के रूप में सामग्री का उपयोग:

string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString(); 
0
var s = (string)((ComboBoxItem)cboPickOne.SelectedItem).Content; 

Dim s = DirectCast(DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content, String) 

चूंकि हम जानते हैं कि सामग्री एक स्ट्रिंग है, मैं ToString() विधि कॉल पर एक कास्ट पसंद करते हैं।

7

बस Heinzi और जिम Brissom के जवाब स्पष्ट करने के लिए यहाँ विजुअल बेसिक में कोड है:

Dim text As String = DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content.ToString() 

और सी #:

string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString(); 

धन्यवाद!

+1

यह इस बात पर निर्भर करता है कि क्या आप आइटम को कॉम्बोबॉक्स इटम्स के रूप में स्पष्ट रूप से निर्दिष्ट करते हैं या बाइंडिंग के माध्यम से स्ट्रिंग के रूप में सीधे निर्दिष्ट करते हैं। बाद के मामले में 'कंटेंट' एक अपवाद फेंक देगा जो मुझे लगता है। –

-1

SelectedItem, जहां सूचकांक बता गया के लिए itemSource के रूप में इस्तेमाल DataTable में स्तंभ का सूचकांक है पाने के लिए DataRowView.Row.Item[Index] या ItemArray[Index] संपत्ति का उपयोग करें। आपके मामले में यह 0 होगा।

वीबी: सूचकांक के बजाय आप भी भी कॉलम का नाम पारित कर सकते हैं

Dim sItem As String=DirectCast(cboPickOne.SelectedItem, DataRowView).Row.Item(1).ToString() 

सी #

String sItem=((DataRowView)cboPickOne.SelectedItem).Row.Item[1].ToString(); 

SelectedValue आप उपयोग कर सकते हैं पाने के लिए:

वीबी:

Dim sValue As String=cboPickOne.SelectedValue.ToString() 

सी #

String sValue=cboPickOne.SelectedValue.ToString(); 
+0

सवाल यह नहीं कहता कि 'कॉम्बोबॉक्स' में आइटम 'DataRowView' प्रकार के हैं। –

1

आप के रूप में

youComboBox.Items.Add("Data"); 

ComboBox में आइटम जोड़ देते हैं तो फिर इस का उपयोग करें:

youComboBox.SelectedItem; 

लेकिन अगर आप डेटा बाइंडिंग से आइटम जोड़ने, इस का उपयोग करें:

DataRowView vrow = (DataRowView)youComboBox.SelectedItem; 
DataRow row = vrow.Row; 
MessageBox.Show(row[1].ToString()); 
1

cboPickOne.Text का उपयोग करना चाहिए आप स्ट्रिंग

2

मैंने अभी यह किया है।

string SelectedItem = MyComboBox.Text; 
संबंधित मुद्दे