Tag-arkiv: c#

Hvordan viser jeg DataTable ColumnNames i en WPF ComboBox?

Denne artikel omhandler it-udvikling i C#.NET WPF

Det er let at finde eksempler på at binde et DataGrid med et DataTable, og der findes også eksempler på at binde en ComboBox med fx værdierne i en kolonne i et DataTable, men mit behov, nemlig at liste selve kolonnenavnene fra et DataTable i en ComboBox, så man kan vælge en bestemt kolonne fra fx et nærtstående DataGrid, det har været lidt svært at finde. Det viste sig, at løsningen var såre simpel, og nu skriver jeg denne artikel, så jeg selv kan finde det, næste gang jeg skal bruge dette. Måske du har fundet denne side via Google? Du skal være velkommen til at skrive i kommentarerne i bunden.

I dette eksempel har jeg i min ViewModel følgende property:

private DataTable gridInputData;
public DataTable GridInputData
{
  get { return gridInputData; }
  set { gridInputData = value; NotifyPropertyChanged(); }
}

Læg mærke til NotifyPropertyChanged() i setteren. Jeg vil ikke forklare dette pattern her, der findes masser af eksempler på dette på nettet.

Et sted i min load-rutine henter jeg noget data (i dette tilfælde fra en Excel-fil) og gemmer det første DataTable ned i min ViewModel property.

DataSet dataset = edr.Load(filepath);
vm.GridInputData = dataset.Tables[0];

Når dette sker, bliver ComboBoxen i XAML’en herunder automatisk udfyldt.
Mit issue, som jeg ikke lige kunne finde et færdigt eksempel på, var, at jeg kunne lave GridInputData.Columns. Jeg troede jeg skulle bruge en særlig parameter på bindingen for at nå til Columns, men almindelig dot-notation er altså nok.


<ComboBox x:Name="cmbVariantColumn" 
          ItemsSource="{Binding GridInputData.Columns}" 
          DisplayMemberPath="ColumnName"/>

Og så fungerer det, yeay!