2010-05-01 13 views
9

ho la DataTable con colonne seguenti:come associare ComboBox con DataTable

id, nome, descrizione, ParentId

e vorrebbe creare un controllo WPF (.NET 4.0 framework) che implementa una casella combinata che visualizza i nomi associati ai valori di id. Quindi, quando l'utente seleziona un nome visualizzato nella casella combinata, la logica dietro deve recuperare il suo valore id.

Sarei molto grato se qualcuno potesse mostrare il modo di fare quanto sopra descritto.

+0

non è necessario creare un controllo per quello ... –

risposta

19

Come così:

Nel file XAML, mettere:

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

Nel codice dietro, mettere:

myComboBox.ItemsSource = myTable; 

(myTable essere un riferimento alla tabella di lei ha citato)

Quindi è possibile raggiungere l'ID della persona attualmente selezionata nella casella combinata utilizzando l'espresso ione: soluzione di modello

NameComboBox.SelectedValue 
+8

DataTable non può essere associato direttamente. Devi associare myTable.DefaultView o IEnumerable da myTable.AsEnumerable(). – Nps

+6

Solo 'myComboBox.ItemsSource = myTable.DefaultView;' funziona. – Igor

+0

L'oggetto ItemsSource può anche essere impostato in XAML: ItemsSource = "{Binding myProperty, Mode = OneWay}". Come nota Nps/Igor, la proprietà deve restituire un DataView anziché un DataTable. – 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}" 
> 

"Nome" e "id" sono colonne in myDataTable.

codice dietro:

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

classe MyViewModel

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

Il valore selezionato (riga) nella colonna "id" ottiene assegnare ai 'theID'.

0

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

codice dietro:

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

questo non dà un'opzione selezionata quando si avvia la finestra, ma almeno l'elenco dei STATUS è mostrando quando clicco sul comboBox.