2010-05-01 13 views
9

मैं निम्नलिखित कॉलम के साथ DataTable है के साथ ComboBox बाध्य करने के लिए:कैसे DataTable

आईडी, नाम, विवरण, ParentId

और एक WPF नियंत्रण (.NET 4.0 ढांचा), जो एक combobox लागू करता है बनाना चाहते हैं, जो उन नामों को प्रदर्शित करता है जो आईडी के मानों से बंधे हैं। तो जब उपयोगकर्ता combobox में प्रदर्शित एक नाम का चयन करता है तो पीछे तर्क को अपना आईडी मान पुनर्प्राप्त करना होता है।

यदि कोई ऊपर वर्णित करने का तरीका दिखा सकता है तो मैं बहुत आभारी हूं।

+0

आपको इसके लिए नियंत्रण बनाने की आवश्यकता नहीं है ... –

उत्तर

19

की तरह तो:

अपने XAML फाइल में, डाल:

<ComboBox x:Name="myComboBox" DisplayMemberPath="Name" SelectedValuePath="id" /> 

अपने कोड में पीछे, डाल:

myComboBox.ItemsSource = myTable; 

(mytable तालिका आप का उल्लेख करने के लिए एक संदर्भ जा रहा है)

फिर आप एक्सप्रेस का उपयोग कर कॉम्बो बॉक्स में वर्तमान में चयनित व्यक्ति की आईडी तक पहुंच सकते हैं आयन:

NameComboBox.SelectedValue 
+8

डेटाटेबल सीधे बाध्य नहीं किया जा सकता है। आपको myTable.AsEnumerable() से myTable.DefaultView या IEnumerable को बाध्य करना होगा। – Nps

+6

केवल 'myComboBox.ItemsSource = myTable.DefaultView;' काम करता है। – Igor

+0

आइटम स्रोत को एक्सएएमएल में भी सेट किया जा सकता है: आइटमसोर्स = "{बाइंडिंग मायप्रोपर्टी, मोड = वनवे}"। चूंकि एनपीएस/इगोर नोट करता है कि संपत्ति को डेटाटेबल के बजाय डेटाव्यू वापस करना चाहिए। – Jeff

-1
private void InitCountry() 
    { 
     BasicData basicData = new DAL.BasicData(); 
     DataTable CountryListDT = basicData.GetCountryList(); 
     txtCountry.SelectedIndex = 0; 
     txtCountry.ItemsSource = CountryListDT.DefaultView; 
    } 

    private void txtCountry_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     BasicData basicData = new DAL.BasicData(); 
     object obj = (object)e.AddedItems; 
     Int32 CountId = (Int32)txtCountry.SelectedValue; 
     InitProvince(CountId); 
    } 
1

MVVM पैटर्न समाधान

XAML:

<ComboBox 
    x:Name="myComboBox" 
    DisplayMemberPath="Name" 
    SelectedValuePath="id" 
    ItemsSource="{Binding myDataTable}"  
    SelectedValue="{Binding theID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
> 

"नाम" और "आईडी" myDataTable में स्तंभ हैं।

पीछे कोड:

private MyViewModel _myViewModel = new MyViewModel(); 
this.DataContext = _myViewModel; 

MyViewModel वर्ग

public DataTable myDataTable { get; set; } 
public short theID { get; set; } 

चयनित मान (पंक्ति) "आईडी" कॉलम के अंतर्गत 'theID' के लिए आवंटित हो जाता है।

0

मेरे XAML:

<ComboBox Margin="10,0,0,0" x:Name="listStatus" 
HorizontalAlignment="Left" Height="30" VerticalAlignment="Top" Width="200" SelectionChanged="listStatus_SelectionChanged" 
    DisplayMemberPath="Status" SelectedValuePath="StatusID" /> 

पीछे कोड:

private void Bind_StatusList() 
{ 
    Service1 serv = new Service1(); 
    dtStatus = serv.GetStatuses(); // a WCF service getting the DataTable from a view from the database. 
    listStatus.ItemsSource = dtStatus.DefaultView; 
} 

यह एक चयनित विकल्प जब खिड़की शुरू होता है देना नहीं है, लेकिन कम से कम स्थिति की सूची है जब मैं कॉम्बोबॉक्स पर क्लिक करता हूं तो दिखा रहा हूं।

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