2010-05-01 19 views
9

tengo el DataTable con columnas siguientes:cómo enlazar ComboBox con DataTable

ID, nombre, descripción, parentid

y le gustaría crear un control de WPF (.NET 4.0 framework) que implementa un cuadro combinado que muestra los nombres que están vinculados a los valores de id. Entonces, cuando el usuario selecciona un nombre que se muestra en el cuadro combinado, la lógica subyacente tiene que recuperar su valor de identificación.

Estaría muy agradecido si alguien pudiera mostrar la forma de hacer lo descrito anteriormente.

+0

no necesita crear un control para eso ... –

Respuesta

19

así:

En su archivo XAML, poner:

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

En su código detrás, poner:

myComboBox.ItemsSource = myTable; 

(myTable ser una referencia a la tabla que usted ha mencionado)

A continuación, puede acceder a la identificación de la persona actualmente seleccionada en el cuadro combinado utilizando el expreso ion: solución patrón

NameComboBox.SelectedValue 
+8

DataTable no se puede vincular directamente. Debe vincular el myTable.DefaultView o IEnumerable de myTable.AsEnumerable(). – Nps

+6

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

+0

ItemsSource también se puede establecer en XAML: ItemsSource = "{Binding myProperty, Mode = OneWay}". Como Nps/Igor señala que la propiedad debería devolver un DataView en lugar de una 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}" 
> 

"Nombre" y "id" son columnas en myDataTable.

Código atrás:

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

clase MyViewModel

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

El valor seleccionado (fila) en la columna "ID" se asigna a 'theID'.

0

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

el código subyacente:

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

Esto no le da una opción seleccionada cuando se inicia la ventana, pero al menos la lista de Estado es mostrando cuando hago clic en el comboBox.