2010-05-01 19 views
9
DataTable

ile ComboBox bağlamak nasıl:aşağıdaki sütunlarla DataTable var

id, Ad, Açıklama

parentId

ve bir combobox uygulayan bir WPF denetimi (NET 4.0 framework) oluşturmak istiyorum kimliğin değerlerine bağlı olan adları görüntüler. Dolayısıyla, kullanıcı açılan kutuda görüntülenen bir ismi seçtiğinde, arka plan mantığının kimlik değerini alması gerekir.

Yukarıda açıklananları yapmanın yollarını gösterebilirse çok minnettar olurum.

+0

Bunun için bir kontrol oluşturmanız gerekmez ... –

cevap

19

böylece gibi: XAML dosyasında

, koyun:

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

Kodunuzda arkasında, koyun:

myComboBox.ItemsSource = myTable; 

(myTable Bahsettiğiniz tabloya bir referans olmak üzere)

Daha sonra, ekspres kullanarak açılan kutudaki seçili kişinin kimliğine ulaşabilirsiniz. iyon:

NameComboBox.SelectedValue 
+8

DataTable doğrudan bağlanamaz. MyTable.DefaultView veya IEnumerable'ı myTable.AsEnumerable() yönteminden bağlamanız gerekir. – Nps

+6

Sadece 'myComboBox.ItemsSource = myTable.DefaultView;' çalışır. – Igor

+0

ItemsSource ayrıca XAML: ItemsSource = "{MyProperty, Mode = OneWay} bağlanıyor" olarak da ayarlanabilir. Nps/Igor notları gibi, özellik DataTable yerine bir DataView döndürmelidir. – 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 desen çözüm

XAML:

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

"Ad" ve "id" myDataTable sütunlar bulunmaktadır. geride

Kodu:

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

MyViewModel sınıf

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

seçilen değer (satır) "id" sütununda 'theID' atamak alır.

0

Benim 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" /> 

Arkası Kod: pencere başladığında

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; 
} 

Bu seçili bir seçeneği vermez, ama Durumu azından listesidir comboBox'ı tıkladığımda gösteriliyor.